我已经使用 Jersey 为 REST 服务编写了一个客户端。出于某种原因,当要解码的 JSON 有一个空数组时,List 对象中只有一个元素。该对象的所有成员都设置为 null,就好像它只是用默认构造函数构造的一样。
订单.java:
@XmlRootElement
public class Order {
private int id;
private List<Photo> photos;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public List<Photo> getPhotos() {
return photos;
}
}
使用 JSON 服务的客户端代码:
Client client = Client.create();
WebResource webResource = client.resource(environment.url);
Order order = webResource.path("Orders")
.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
.accept(MediaType.APPLICATION_JSON_TYPE)
.post(Order.class, formData);
日志显示返回的 JSON 是:
{"id":704,"photos":[]}
但是,“照片”列表并不像预期的那样为空,而是包含一个 Photo 对象。该对象的所有成员均为 null,就好像它是使用默认构造函数构造的一样。
什么在创建这个对象,为什么?
更多详细信息:如果我尝试反序列化枚举列表而不是对象列表,则存在类似的问题。在这种情况下,这次我还得到了一个大小为 1 的列表,其中只包含“null”。
最佳答案
我从来没有找到合适的答案,只是恢复使用 Gson用于 JSON 的所有编码和解码。现在它实际上更干净了,因为 GSON 对我的 POJO 施加了更少的约束(不需要注释或可变性)。
ClientResponse response = webResource.path("Orders")
.type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
.accept(MediaType.APPLICATION_JSON_TYPE)
.post(ClientResponse.class, formData);
Order order = new Gson().fromJson(response.getEntity(String.class), Order.class);
这不是我最初寻找的解决方案。我只是将它发布为下一个最好的东西(结果更好!)。
关于java - 为什么 Jersey 客户端在我的列表应该为空时将对象插入到列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10555157/