Не включайте пустой объект в Джексона - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь создать JSON с пружинной загрузкой.

Класс:

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

//     getters and setters...
}

impletentation:

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

Итак, есть экземпляр Person с пустым details, и это именно то, что возвращает Джексон:

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

Я хочу, чтобы json без пустых скобок {}:

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

Этот вопрос мне не помог:

Обновление 1:

Я использую Джексон 2.9.6

1 Ответ

0 голосов
/ 11 ноября 2018

Без специального сериализатора Джексон будет включать ваш объект.

Решение 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...