摘要:作為日常開發中一種常用的傳輸格式。對應的,定義了三種標準類型的輸入接口和輸出接口,。實體類如果請求的傳輸數據量很大,并且無需和外系統對接的場景,建議使用屬性來組織,這樣可以極大的減小格式的數據包的規模。如有版權侵犯,請聯系郵箱。
XML作為日常開發中一種常用的傳輸格式。jersey 也做了很優秀的支持。
我學習 《Java RESTful Web Service 實戰》 一書。書中有些知識點,不太常用,但是比較重要,特寫下次筆記已備忘。
jersey是遵循 JAX-RS2.0規范的一個實現,旨在使用java提供RESTful服務的框架
java 中對xml文檔的處理有兩大標準,JAXB 和 JAXP
JAXB (Java API for XML Processing)
JAXP (Java Architecture for XML Binding, jsr-222)
JAXP 標準
JAXP 包含了 DOM,SAX,StAX三種解析xml的技術標準。
對應的,JAXP定義了三種標準類型的輸入接口 Source(DOMSource, SAXSource, StreamSource) 和輸出接口, Result(DOMResult, SAXResult, StreamReault)。jersey 可以使用JAXP的輸入類型最為REST方法的參數。
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; }
優缺點:JAXP的缺點是需要編碼解析XML,這樣正加了開發成本,但對于業務邏輯的實現沒有實際貢獻。JAXB只需要在POJO中定義相關的注解(早起人們是使用XML配置文件老做這件事),使其和XML的schema對應,無需對XML進行程序是解析,彌補了JAXP的這一缺點。
使用JAXB的開發效率更高,相對于JAXP的性能更高。開發過程簡化,執行邏輯簡化,是的JAXP帶來的優勢就可以基本忽略不計,綜合考量,實現起來更簡單的JAXB更適合REST開發。
jersey支持使用JAXBElement作為REST方法參數形式,也支持直接使用POJO作為REST方法參數的形式,這種形式更為常用。示例代碼如下。
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請求的傳輸數據量很大,并且無需和外系統對接的場景,建議使用屬性來組織XML,這樣可以極大的減小XML格式的數據包的規模。
XML_SECURITY_DISABLE
jersey 默認設置了 XMLConstants.FEATURE_SECURE_PROCESSING屬性,當屬性或元素過多的時候,回報 well-formedness error這樣的錯誤信息。這是可以通過設置MessageProperties.XML_SECURITY_DISABLE的參數值為TRUE來屏蔽。
服務器和客戶端示例代碼如下。
@ApplicationPath("/*") public class AirResourceConfig extends ResourceConfig { public AirResourceConfig () { packages("com.example"); property(MessageProperties.XML_SECURITY_DISABLE, Boolean.TRUE); } }
以上文字片段以及圖片,部分來自于 《Java RESTful Web Service 實戰》一書。如有版權侵犯,請聯系郵箱[ychangsheng@gmail.com]。本人及時修改。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/110328.html
摘要:作為日常開發中一種常用的傳輸格式。對應的,定義了三種標準類型的輸入接口和輸出接口,。實體類如果請求的傳輸數據量很大,并且無需和外系統對接的場景,建議使用屬性來組織,這樣可以極大的減小格式的數據包的規模。如有版權侵犯,請聯系郵箱。 XML作為日常開發中一種常用的傳輸格式。jersey 也做了很優秀的支持。 我學習 《Java RESTful Web Service 實戰》 一書。書中有...
摘要:在學習中看到框架支持幾乎多有的原生類型的傳輸格式。是遵循規范的一個實現,旨在使用提供服務的框架原生類型中整型數值浮點型數值編碼字符型數值布爾類型值都提供支持,并且提供了,基礎類型的數組形式的支持。 在學習jersey中看到jersey框架支持幾乎多有的java原生類型的傳輸格式。 我學習 《Java RESTful Web Service 實戰》 一書。書中有些知識點,不太常用,但是...
摘要:中引入了模塊的概念,默認情況下,中將不再包含的包,而在時關于這個都是捆綁在一起的。 因為是初學REST風格,所以并不打算馬上就用springMVC這些框架去實現restful,所以先用jersey搭建一個rest的demo上手玩玩,本文記錄了搭建所需要引入的jar包,以及搭建過程碰到的坑,希望能讓大家有所收獲,歡迎交流! 1、Maven jar包引入 ...
摘要:當不存在子類,也不存在子類時,規范中定義,在這種情況下,為服務動態生成一個名為的實例,并自動探測匹配資源。其中是中的基類,它繼承于情況二當不存在子類,但是存在子類時。以上就是規范中定義的四種服務的方式。 最近在學習 jersey 框架。他是 目前比較流行的 基于 JAX-RS 2.0 規范實現的 RESTful 框架。 我是跟著 《Java RESTful Web Service 實...
閱讀 3479·2023-04-25 22:45
閱讀 1282·2021-11-11 16:54
閱讀 2790·2019-08-30 15:44
閱讀 3190·2019-08-30 15:44
閱讀 1646·2019-08-30 13:55
閱讀 941·2019-08-29 18:45
閱讀 1195·2019-08-29 17:25
閱讀 1007·2019-08-29 12:59