Json 如何创建适当的JAXB映射以实现Jersey反序列化过程
我收到来自WS的JSON响应:Json 如何创建适当的JAXB映射以实现Jersey反序列化过程,json,serialization,jersey,jax-rs,deserialization,Json,Serialization,Jersey,Jax Rs,Deserialization,我收到来自WS的JSON响应: [ { "name": "Bobby", "status": "single" }, { "name": "John", "status": "married" } ] 这是我的包装纸 @XmlRootElement(name = "users") public class UserListWrapper { private List<User> users; @XmlE
[
{
"name": "Bobby",
"status": "single"
},
{
"name": "John",
"status": "married"
}
]
这是我的包装纸
@XmlRootElement(name = "users")
public class UserListWrapper {
private List<User> users;
@XmlElement(name = "user")
public List<User> getUsers() {
return users;
}
// getters and setters omitted
}
问题是当Jersey尝试反序列化对我的包装器对象的响应时。上面说
Caused by: org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of com.jersey.test.UserListWrapper out of START_ARRAY token
我发现我的包装器注释有问题。我怎样才能修好它们
UPD
当我发送
{
"user": [
{
"name": "Bob",
"status": "single"
},
{
"name": "Mike",
"status": "married"
}
]
}
一切正常。但我需要这种格式
[
{
"name": "Bobby",
"status": "single"
},
...
]
UPD
泽西岛客户端代码
HttpAuthenticationFeature authenticationFeature = HttpAuthenticationFeature.basic("user", "secret");
Client client = ClientBuilder
.newClient()
.register(authenticationFeature)
.register(JacksonFeature.class);
WebTarget target = client.target("http://localhost:8080/server/");
UserListWrapper entity;
Response resp;
resp = target.queryParam("u", "info")
.path("/rest/users")
.request()
.accept(APPLICATION_JSON)
.get();
entity = resp.readEntity(UserListWrapper.class);
那么忘记
UserListWrapper
包装器吧<代码>列表非常适合JSON数组([]
)格式。如果添加包装类,则需要额外的JSON对象层({}
)。这:
但我不能修改Web服务。它向我发送
[{“name”:“Bobby”,“status”:“single”},…]
,资源方法接受UserListWrapper
类型?是的。但我可以对包装器进行更改。它在客户端上。我不明白的是,如果服务需要{“用户”:[{},{}]}
,那么为什么不这样发送它呢?您似乎遇到了两个不同的问题:一个是发送问题,另一个是接收问题。这就是让我困惑的原因。你能澄清一下吗
HttpAuthenticationFeature authenticationFeature = HttpAuthenticationFeature.basic("user", "secret");
Client client = ClientBuilder
.newClient()
.register(authenticationFeature)
.register(JacksonFeature.class);
WebTarget target = client.target("http://localhost:8080/server/");
UserListWrapper entity;
Response resp;
resp = target.queryParam("u", "info")
.path("/rest/users")
.request()
.accept(APPLICATION_JSON)
.get();
entity = resp.readEntity(UserListWrapper.class);
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response createBook(List<User> users) {
WebResource resource = client.resource("...");
List<User> users = resource.get(new GenericType<List<User>>(){});
List<User> user = response.readEntity(new GenericType<List<User>>(){});