jax-rs jax-ws
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 jax-ws