摘要:作為日常開發(fā)中一種常用的傳輸格式。對應(yīng)的,定義了三種標(biāo)準(zhǔn)類型的輸入接口和輸出接口,。實體類如果請求的傳輸數(shù)據(jù)量很大,并且無需和外系統(tǒng)對接的場景,建議使用屬性來組織,這樣可以極大的減小格式的數(shù)據(jù)包的規(guī)模。如有版權(quán)侵犯,請聯(lián)系郵箱。
XML作為日常開發(fā)中一種常用的傳輸格式。jersey 也做了很優(yōu)秀的支持。
我學(xué)習(xí) 《Java RESTful Web Service 實戰(zhàn)》 一書。書中有些知識點,不太常用,但是比較重要,特寫下次筆記已備忘。
jersey是遵循 JAX-RS2.0規(guī)范的一個實現(xiàn),旨在使用java提供RESTful服務(wù)的框架
java 中對xml文檔的處理有兩大標(biāo)準(zhǔn),JAXB 和 JAXP
JAXB (Java API for XML Processing)
JAXP (Java Architecture for XML Binding, jsr-222)
JAXP 標(biāo)準(zhǔn)
JAXP 包含了 DOM,SAX,StAX三種解析xml的技術(shù)標(biāo)準(zhǔn)。
對應(yīng)的,JAXP定義了三種標(biāo)準(zhǔn)類型的輸入接口 Source(DOMSource, SAXSource, StreamSource) 和輸出接口, Result(DOMResult, SAXResult, StreamReault)。jersey 可以使用JAXP的輸入類型最為REST方法的參數(shù)。
java// StAX @POST @Path("stream") @Consumes(MediaTYpe.APPLICATION_XML) @Produces(MediaType.APPLICATION_XML) public StreamSource getStreamSource( // 接收 類型 javax.xml.transform.stream.StreamSource streamSource) { // 返回 類型。 return streamSource; }
```java
// SAX
@POST
@Path("sax")
@Consumes(MediaTYpe.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
public SAXSource getSAXSource(
// 接受 類型
javax.xml.transform.sax.SAXSource saxSource
){
// 返回 類型
return saxSource;
}
```java // DOM @POST @Path("doc") @Consumes(MediaTYpe.APPLICATION_XML) @Produces(MediaType.APPLICATION_XML) public Document getDocument( // 接受 類型 org.w3c.dom.Document document){ // 返回 類型 return document; }
優(yōu)缺點:JAXP的缺點是需要編碼解析XML,這樣正加了開發(fā)成本,但對于業(yè)務(wù)邏輯的實現(xiàn)沒有實際貢獻(xiàn)。JAXB只需要在POJO中定義相關(guān)的注解(早起人們是使用XML配置文件老做這件事),使其和XML的schema對應(yīng),無需對XML進(jìn)行程序是解析,彌補(bǔ)了JAXP的這一缺點。
使用JAXB的開發(fā)效率更高,相對于JAXP的性能更高。開發(fā)過程簡化,執(zhí)行邏輯簡化,是的JAXP帶來的優(yōu)勢就可以基本忽略不計,綜合考量,實現(xiàn)起來更簡單的JAXB更適合REST開發(fā)。
jersey支持使用JAXBElement作為REST方法參數(shù)形式,也支持直接使用POJO作為REST方法參數(shù)的形式,這種形式更為常用。示例代碼如下。
java@POST @Path("jaxb") @Consumes(MediaTYpe.APPLICATION_XML) @Produces(MediaType.APPLICATION_XML) public Book getEntity(JAXBElementbooElement){ Book book = booElement.getValue(); System.out.println(book.getBookName()); return book; } // book 實體類 @XmlRootElement public class Book implements Serializable { @XmlAttribute(name = "bookId") public Long getBookId(){ return bookId; } @XmlAttribute(name = "bookName") public String getBookName(){ return bookName; } @XmlAttribute(name = "publisher") public String getPublisher(){ return publisher; } }
Content-Type: application/xml
如果REST請求的傳輸數(shù)據(jù)量很大,并且無需和外系統(tǒng)對接的場景,建議使用屬性來組織XML,這樣可以極大的減小XML格式的數(shù)據(jù)包的規(guī)模。
XML_SECURITY_DISABLE
jersey 默認(rèn)設(shè)置了 XMLConstants.FEATURE_SECURE_PROCESSING屬性,當(dāng)屬性或元素過多的時候,回報 well-formedness error這樣的錯誤信息。這是可以通過設(shè)置MessageProperties.XML_SECURITY_DISABLE的參數(shù)值為TRUE來屏蔽。
服務(wù)器和客戶端示例代碼如下。
@ApplicationPath("/*") public class AirResourceConfig extends ResourceConfig { public AirResourceConfig () { packages("com.example"); property(MessageProperties.XML_SECURITY_DISABLE, Boolean.TRUE); } }
以上文字片段以及圖片,部分來自于 《Java RESTful Web Service 實戰(zhàn)》一書。如有版權(quán)侵犯,請聯(lián)系郵箱[[email protected]]。本人及時修改。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/110328.html
摘要:作為日常開發(fā)中一種常用的傳輸格式。對應(yīng)的,定義了三種標(biāo)準(zhǔn)類型的輸入接口和輸出接口,。實體類如果請求的傳輸數(shù)據(jù)量很大,并且無需和外系統(tǒng)對接的場景,建議使用屬性來組織,這樣可以極大的減小格式的數(shù)據(jù)包的規(guī)模。如有版權(quán)侵犯,請聯(lián)系郵箱。 XML作為日常開發(fā)中一種常用的傳輸格式。jersey 也做了很優(yōu)秀的支持。 我學(xué)習(xí) 《Java RESTful Web Service 實戰(zhàn)》 一書。書中有...
摘要:在學(xué)習(xí)中看到框架支持幾乎多有的原生類型的傳輸格式。是遵循規(guī)范的一個實現(xiàn),旨在使用提供服務(wù)的框架原生類型中整型數(shù)值浮點型數(shù)值編碼字符型數(shù)值布爾類型值都提供支持,并且提供了,基礎(chǔ)類型的數(shù)組形式的支持。 在學(xué)習(xí)jersey中看到j(luò)ersey框架支持幾乎多有的java原生類型的傳輸格式。 我學(xué)習(xí) 《Java RESTful Web Service 實戰(zhàn)》 一書。書中有些知識點,不太常用,但是...
摘要:中引入了模塊的概念,默認(rèn)情況下,中將不再包含的包,而在時關(guān)于這個都是捆綁在一起的。 因為是初學(xué)REST風(fēng)格,所以并不打算馬上就用springMVC這些框架去實現(xiàn)restful,所以先用jersey搭建一個rest的demo上手玩玩,本文記錄了搭建所需要引入的jar包,以及搭建過程碰到的坑,希望能讓大家有所收獲,歡迎交流! 1、Maven jar包引入 ...
摘要:當(dāng)不存在子類,也不存在子類時,規(guī)范中定義,在這種情況下,為服務(wù)動態(tài)生成一個名為的實例,并自動探測匹配資源。其中是中的基類,它繼承于情況二當(dāng)不存在子類,但是存在子類時。以上就是規(guī)范中定義的四種服務(wù)的方式。 最近在學(xué)習(xí) jersey 框架。他是 目前比較流行的 基于 JAX-RS 2.0 規(guī)范實現(xiàn)的 RESTful 框架。 我是跟著 《Java RESTful Web Service 實...
閱讀 3521·2023-04-25 22:45
閱讀 1316·2021-11-11 16:54
閱讀 2821·2019-08-30 15:44
閱讀 3211·2019-08-30 15:44
閱讀 1674·2019-08-30 13:55
閱讀 974·2019-08-29 18:45
閱讀 1228·2019-08-29 17:25
閱讀 1039·2019-08-29 12:59