java - 为什么 Jersey 客户端在我的列表应该为空时将对象插入到列表中?

标签 java json rest jaxb jersey

我已经使用 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/

相关文章:

java - 在重写的 JTable 中的构造函数之前调用的方法

javascript - 返回 JsonConvert.SerializeObject(json) [.NET 处理程序] 后在 javascript 上解析 JSON

java - 修剪这组数据的简单方法是什么? ( java )

rest - 我应该返回关联实体还是整个实体的 id

rest - protected Controller 在Grails应用中一个 Action 返回403,但没有另一个 Action

java - 与 SQL Server : login failed for user x 的 JDBC 连接

java - 使用Jsoup解析Xml

rest - 如何使用restful API 实现对象属性更新?

java - JPA - 使用中间表在同一表之间映射 OneToMany 关联

javascript - 通过 jQuery AJAX POST 发送 JavaScript 数组