摘要:作為日常開發(fā)中一種常用的傳輸格式。對(duì)應(yīng)的,定義了三種標(biāo)準(zhǔn)類型的輸入接口和輸出接口,。實(shí)體類如果請(qǐng)求的傳輸數(shù)據(jù)量很大,并且無(wú)需和外系統(tǒng)對(duì)接的場(chǎng)景,建議使用屬性來(lái)組織,這樣可以極大的減小格式的數(shù)據(jù)包的規(guī)模。如有版權(quán)侵犯,請(qǐng)聯(lián)系郵箱。
XML作為日常開發(fā)中一種常用的傳輸格式。jersey 也做了很優(yōu)秀的支持。
我學(xué)習(xí) 《Java RESTful Web Service 實(shí)戰(zhàn)》 一書。書中有些知識(shí)點(diǎn),不太常用,但是比較重要,特寫下次筆記已備忘。
jersey是遵循 JAX-RS2.0規(guī)范的一個(gè)實(shí)現(xiàn),旨在使用java提供RESTful服務(wù)的框架
java 中對(duì)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)。
對(duì)應(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)缺點(diǎn):JAXP的缺點(diǎn)是需要編碼解析XML,這樣正加了開發(fā)成本,但對(duì)于業(yè)務(wù)邏輯的實(shí)現(xiàn)沒(méi)有實(shí)際貢獻(xiàn)。JAXB只需要在POJO中定義相關(guān)的注解(早起人們是使用XML配置文件老做這件事),使其和XML的schema對(duì)應(yīng),無(wú)需對(duì)XML進(jìn)行程序是解析,彌補(bǔ)了JAXP的這一缺點(diǎn)。
使用JAXB的開發(fā)效率更高,相對(duì)于JAXP的性能更高。開發(fā)過(guò)程簡(jiǎn)化,執(zhí)行邏輯簡(jiǎn)化,是的JAXP帶來(lái)的優(yōu)勢(shì)就可以基本忽略不計(jì),綜合考量,實(shí)現(xiàn)起來(lái)更簡(jiǎ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 實(shí)體類 @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請(qǐng)求的傳輸數(shù)據(jù)量很大,并且無(wú)需和外系統(tǒng)對(duì)接的場(chǎng)景,建議使用屬性來(lái)組織XML,這樣可以極大的減小XML格式的數(shù)據(jù)包的規(guī)模。
XML_SECURITY_DISABLE
jersey 默認(rèn)設(shè)置了 XMLConstants.FEATURE_SECURE_PROCESSING屬性,當(dāng)屬性或元素過(guò)多的時(shí)候,回報(bào) well-formedness error這樣的錯(cuò)誤信息。這是可以通過(guò)設(shè)置MessageProperties.XML_SECURITY_DISABLE的參數(shù)值為TRUE來(lái)屏蔽。
服務(wù)器和客戶端示例代碼如下。
@ApplicationPath("/*") public class AirResourceConfig extends ResourceConfig { public AirResourceConfig () { packages("com.example"); property(MessageProperties.XML_SECURITY_DISABLE, Boolean.TRUE); } }
以上文字片段以及圖片,部分來(lái)自于 《Java RESTful Web Service 實(shí)戰(zhàn)》一書。如有版權(quán)侵犯,請(qǐng)聯(lián)系郵箱[[email protected]]。本人及時(shí)修改。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64234.html
摘要:作為日常開發(fā)中一種常用的傳輸格式。對(duì)應(yīng)的,定義了三種標(biāo)準(zhǔn)類型的輸入接口和輸出接口,。實(shí)體類如果請(qǐng)求的傳輸數(shù)據(jù)量很大,并且無(wú)需和外系統(tǒng)對(duì)接的場(chǎng)景,建議使用屬性來(lái)組織,這樣可以極大的減小格式的數(shù)據(jù)包的規(guī)模。如有版權(quán)侵犯,請(qǐng)聯(lián)系郵箱。 XML作為日常開發(fā)中一種常用的傳輸格式。jersey 也做了很優(yōu)秀的支持。 我學(xué)習(xí) 《Java RESTful Web Service 實(shí)戰(zhàn)》 一書。書中有...
摘要:在學(xué)習(xí)中看到框架支持幾乎多有的原生類型的傳輸格式。是遵循規(guī)范的一個(gè)實(shí)現(xiàn),旨在使用提供服務(wù)的框架原生類型中整型數(shù)值浮點(diǎn)型數(shù)值編碼字符型數(shù)值布爾類型值都提供支持,并且提供了,基礎(chǔ)類型的數(shù)組形式的支持。 在學(xué)習(xí)jersey中看到j(luò)ersey框架支持幾乎多有的java原生類型的傳輸格式。 我學(xué)習(xí) 《Java RESTful Web Service 實(shí)戰(zhàn)》 一書。書中有些知識(shí)點(diǎn),不太常用,但是...
摘要:中引入了模塊的概念,默認(rèn)情況下,中將不再包含的包,而在時(shí)關(guān)于這個(gè)都是捆綁在一起的。 因?yàn)槭浅鯇W(xué)REST風(fēng)格,所以并不打算馬上就用springMVC這些框架去實(shí)現(xiàn)restful,所以先用jersey搭建一個(gè)rest的demo上手玩玩,本文記錄了搭建所需要引入的jar包,以及搭建過(guò)程碰到的坑,希望能讓大家有所收獲,歡迎交流! 1、Maven jar包引入 ...
摘要:當(dāng)不存在子類,也不存在子類時(shí),規(guī)范中定義,在這種情況下,為服務(wù)動(dòng)態(tài)生成一個(gè)名為的實(shí)例,并自動(dòng)探測(cè)匹配資源。其中是中的基類,它繼承于情況二當(dāng)不存在子類,但是存在子類時(shí)。以上就是規(guī)范中定義的四種服務(wù)的方式。 最近在學(xué)習(xí) jersey 框架。他是 目前比較流行的 基于 JAX-RS 2.0 規(guī)范實(shí)現(xiàn)的 RESTful 框架。 我是跟著 《Java RESTful Web Service 實(shí)...
閱讀 1774·2021-10-11 10:57
閱讀 2364·2021-10-08 10:14
閱讀 3404·2019-08-29 17:26
閱讀 3363·2019-08-28 17:54
閱讀 3032·2019-08-26 13:38
閱讀 2913·2019-08-26 12:19
閱讀 3617·2019-08-23 18:05
閱讀 1288·2019-08-23 17:04