Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Jersey客户端在我的列表中插入一个应该为空的对象?_Java_Json_Rest_Jaxb_Jersey - Fatal编程技术网

Java 为什么Jersey客户端在我的列表中插入一个应该为空的对象?

Java 为什么Jersey客户端在我的列表中插入一个应该为空的对象?,java,json,rest,jaxb,jersey,Java,Json,Rest,Jaxb,Jersey,我已经使用Jersey为REST服务编写了一个客户端。出于某种原因,当要解组的JSON具有空数组时,List对象中只有一个元素。该对象的所有成员都设置为null,就好像它是用默认构造函数构造的一样 Order.java: @XmlRootElement public class Order { private int id; private List<Photo> photos; public int getId() { return id;

我已经使用Jersey为REST服务编写了一个客户端。出于某种原因,当要解组的JSON具有空数组时,List对象中只有一个元素。该对象的所有成员都设置为null,就好像它是用默认构造函数构造的一样

Order.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为:

{"id":704,"photos":[]}
但是,“照片”列表并非如预期的那样为空,而是包含一个照片对象。此对象的所有成员都为null,就好像它是用默认构造函数构造的一样

创建此对象的原因是什么



更多详细信息:如果我尝试反序列化枚举列表而不是对象列表,则存在类似的问题。在本例中,我还得到了一个大小为1的列表,其中只包含“null”。

我从未找到一个合适的答案,只是恢复使用JSON的所有编组和解编组。现在它实际上更干净了,因为GSON对我的POJO施加了更少的约束(不需要注释或可变性)


这不是我最初寻找的解决方案。我刚刚把它作为下一个最好的东西发布(结果更好!)。

将此注释添加到您的
订单
类中:

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
此注释指向
Jackson
序列化程序,以避免使用空值写入对象

UPD。也许这个注释也应该添加到
Photo
类中

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);
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)