[英]Jersey JAX-RS Client XML to java.util.List deserialization
我正在尝试访问JAX-RS服务(球衣实现),该服务以XML格式返回给我一个Employees的java.util.list。
Service方法签名如下所示:
@GET
@Path("/getEmployeeListXML")
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.APPLICATION_XML)
public List<EmployeeXML> getEmployeeListXML(@QueryParam("id") String id){
//Some code which returns a List<EmployeeXML>
}
返回的XML格式如下:
<employeeXMLs>
<employeeXML>
<empId>1</empId>
<empName>John</empName>
<empAge>35</empAge>
<empSex>Male</empSex>
</employeeXML>
<employeeXML>
<empId>2</empId>
<empName>Lisa</empName>
<empAge>23</empAge>
<empSex>Female</empSex>
</employeeXML>
</employeeXMLs>
为了从我的jersey客户端访问此文件,我使用以下代码:
List<EmployeeXML> empListXML = (List<EmployeeXML>)service.path("rest").path("GetService").path("getEmployeeListXML").accept(MediaType.APPLICATION_XML).get(EmployeeXML.class);
这是不正确的,因为返回类型应该是列表,但是在get方法中,目前我正在尝试检索单个对象。 我不确定如何从客户端这里检索列表:(
我收到此异常:
unexpected element (uri:"", local:"employeeXMLs"). Expected elements are <{}employeeListXML>,<{}employeeXML>
请帮我完成这项工作。
谢谢,
您可以使用GenericType
类来获取对象列表:
List<EmployeeXML> empListXML = (List<EmployeeXML>)service.path("rest").path("GetService").path("getEmployeeListXML").accept(MediaType.APPLICATION_XML).get(new GenericType<List<EmployeeXML>>(){});
您需要使用“超类型令牌”来定义客户端类中的返回类型:
List<EmployeeXML> empListXML = service
.path("rest")
.path("GetService")
.path("getEmployeeListXML")
.accept(MediaType.APPLICATION_XML)
.get(new GenericType<List<EmployeeXML>>() {});
为了“保留” Jersey在反序列化服务器响应时将使用的通用参数信息,需要超类型令牌。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.