JAX-RS 2.x与Spring MVC:返回对象列表的XML表示
JSON是所有REST * API的王者,但是您仍然可能需要公開多種表示形式,包括XML。 使用JAX-RS和Spring MVC都非常簡單。 實際上,唯一要做的就是用JAXB注釋對從API調用返回的POJO進行注釋。
但是,我認為序列化對象列表時,JAX-RS的性能要比Spring MVC好。 讓我們來看看。
POJO
兩者的唯一要求(假設使用JAXB)是使用JAXB注釋對POJO進行注釋:
@XmlRootElement public class Incident {}JAX-RS方式
@GET @Path("user/{userId}/incident") public List<Incident> getUserIncidents(@PathParam("userId") long userId) {// return }當以application/json作為可接受的表示執行上述方法時,JAX-RS會將返回的列表正確序列化為JSON,如下所示:
[{"description": "Lorem ipsum..." ,"status": "NEW"},{"description": "Lorem ipsum..." ,"status": "NEW"} ]沒有特殊的包裝對象。 生成的XML可能如下所示:
<incidents><incident><description>Lorem ipsum ...</description><status>NEW</status></incident><incident><description>Lorem ipsum ...</description><status>NEW</status></incident> </incidents>它只是工作。 沒有包裝對象。 沒有額外的工作。 我們完了。
Spring MVC方式(JAXB)
在Spring中您將如何做(比如說Spring Boot,因為它起步最快)?
@RequestMapping(value = "user/{userId}/incident") public List<Incident> getUserIncidents(@PathVariable("userId") long userId) {// return }使用以下請求請求JSON表示形式后:
$ curl -i http://localhost:8080/user/3/incident結果與JAX-RS相同。
要使服務器呈現XML而不是JSON,您可能必須發送一個Accept: text/xml標頭:
$ curl -i -H "Accept: text/xml" http://localhost:8080/user/3/incident但是結果將是: 406不可接受。 在這種情況下找不到可接受的表示 。
Spring MVC方式(jackson-dataformat-xml)
借助Spring MVC,有一種解決方案可以立即使用,類似于JAX-RS,但輸出效果較差 。 該解決方案使用jackson-dataformat-xml。 向項目添加依賴項:
<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId> </dependency>使用新的依賴關系,對XML表示的調用應返回如下內容:
<ArrayList><item><description>Lorem ipsum ...</description><status>NEW</status></item><item><description>Lorem ipsum ...</description><status>NEW</status></item> </ArrayList>請注意,jackson-dataformat-xml不需要使用JAXB批注。
翻譯自: https://www.javacodegeeks.com/2015/04/jax-rs-2-x-vs-spring-mvc-returning-an-xml-representation-of-a-list-of-objects.html
總結
以上是生活随笔為你收集整理的JAX-RS 2.x与Spring MVC:返回对象列表的XML表示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上海市提出IDC建设指导意见,新建IDC
- 下一篇: 什么比日期和时区更难? SQL / JD