不要向杰克逊添加空对象

时间:2018-11-09 23:52:21

标签: java json spring-boot

我正在尝试使用Spring Boot创建json。

班级:

public class Person {
    private String name;
    private PersonDetails details;

//     getters and setters...
}

实现:

Person person = new Person();
person.setName("Apple");
person.setDetails(new PersonDetails());

因此,有一个Person实例,其中details为空,而这正是杰克逊返回的内容:

"person": {
    "name": "Apple",
    "details": {}
}

我想使用json 不带空括号{}

"person": {
    "name": "Apple"
}

这个问题对我没有帮助:

更新1:

我正在使用Jackson 2.9.6

1 个答案:

答案 0 :(得分:1)

如果没有自定义序列化程序,杰克逊将包含您的对象。

解决方案1:将新对象替换为

person.setDetails(new PersonDetails());

使用

person.setDetails(null);

并添加

@JsonInclude(Include.NON_NULL)
public class Person {

解决方案2:自定义序列化程序

public class PersonDetailsSerializer extends StdSerializer<PersonDetails> {

    public PersonDetailsSerializer() {
        this(null);
    }

    public PersonDetailsSerializer(Class<PersonDetails> t) {
        super(t);
    }

    @Override
    public void serialize(
            PersonDetails personDetails, JsonGenerator jgen, SerializerProvider provider)
            throws IOException, JsonProcessingException {
        // custom behavior if you implement equals and hashCode in your code
        if(personDetails.equals(new PersonDetails()){
           return;
        }
        super.serialize(personDetails,jgen,provider);
    }
}

并在您的PersonDetails

public class Person {
    private String name;
    @JsonSerialize(using = PersonDetailsSerializer.class)
    private PersonDetails details;
}