Как сказать Джексону игнорировать объект с полями EMPTY или NULL во время сериализации? - PullRequest
0 голосов
/ 27 апреля 2020

Я знаю об этих аннотациях @JsonInclude (JsonInclude.Include.NON_NULL) и @JsonInclude (JsonInclude.Include.EMPTY), но в моем случае это не работает.

Мой случай:

У меня есть некоторый класс (entity (SomeClass)) с какой-то другой сущностью внутри (SomeObject)

    @Data
    public class SomeClass {
        private String fieldOne;
        @JsonInclude(JsonInclude.Include.NON_NULL)
        private String fieldTwo;
        @JsonInclude(JsonInclude.Include.NON_NULL)
        private SomeObject someObject;
    }

Entity - SomeObject

@Data
public class SomeObject {
    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String name;
}

Основной класс

public class Main {
    public static void main(String[] args) throws JsonProcessingException {
        SomeClass someClass = new SomeClass();
        someClass.setFieldOne("some data");

        SomeObject someObject = new SomeObject();
        someObject.setName(null);
        someClass.setSomeObject(someObject);

        ObjectMapper objectMapper = new ObjectMapper();
        String someClassDeserialized = objectMapper.writeValueAsString(someClass);
        System.out.println(someClassDeserialized);
    }
}

Вывод

{"fieldOne":"some data","someObject":{}}

Окончательный вывод должен быть без объекта (SomeObject) с пустыми или пустыми полями:

{"fieldOne":"some data"}

1 Ответ

1 голос
/ 27 апреля 2020

Я думаю, что только пользовательские логики c могут быть применены здесь. Вам необходимо использовать @JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = YourFilter.class) и создать собственный класс YourFilter. Вы можете создать базовый интерфейс с помощью логического метода и переопределить его во всех классах, которые необходимо отфильтровать на основе обнуляемости всех / желаемых полей в классе. Или вы можете проанализировать аннотации @JsonInclude(JsonInclude.Include.NON_NULL) в этом методе, чтобы получить все поля, которые нужно проверить на пустоту.

https://www.logicbig.com/tutorials/misc/jackson/json-include-customized.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...