Ray*_*oal 17 jax-rs jaxb jersey
我有一个带JAXB注释的员工类:
@XmlRootElement(name = "employee")
public class Employee {
private Integer id;
private String name;
...
@XmlElement(name = "id")
public int getId() {
return this.id;
}
... // setters and getters for name, equals, hashCode, toString
}
Run Code Online (Sandbox Code Playgroud)
还有一个JAX-RS资源对象(我使用的是Jersey 1.12)
@GET
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Path("/")
public List<Employee> findEmployees(
@QueryParam("name") String name,
@QueryParam("page") String pageNumber,
@QueryParam("pageSize") String pageSize) {
...
List<Employee> employees = employeeService.findEmployees(...);
return employees;
}
Run Code Online (Sandbox Code Playgroud)
此端点工作正常.我明白了
<employees>
<employee>
<id>2</id>
<name>Ana</name>
</employee>
</employees>
Run Code Online (Sandbox Code Playgroud)
但是,如果我更改方法以返回Response对象,并将员工列表放在响应正文中,如下所示:
@GET
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Path("/")
public Response findEmployees(
@QueryParam("name") String name,
@QueryParam("page") String pageNumber,
@QueryParam("pageSize") String pageSize) {
...
List<Employee> employees = employeeService.findEmployees(...);
return Response.ok().entity(employees).build();
}
Run Code Online (Sandbox Code Playgroud)
由于以下异常,端点导致HTTP 500:
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class java.util.ArrayList, and Java type class java.util.ArrayList, and MIME media type application/xml was not found
在第一种情况下,JAX-RS显然安排了正确的消息编写器在返回集合时启动.当集合放置在实体主体中时,这似乎有些不一致.在返回响应时,我可以采用什么方法来实现列表的自动JAXB序列化?
我知道我可以
EmployeeList类但是想知道是否有一种很好的方法来使用该Response对象并使列表序列化而不创建我自己的包装类.
| 归档时间: |
|
| 查看次数: |
26462 次 |
| 最近记录: |