Как заставить библиотеку неизменяемых пропустить сериализацию необязательных полей

#java #json #jackson #immutables-library

#java #json #джексон #неизменяемые-библиотека

Вопрос:

Я работаю с библиотекой неизменяемых (https://immutables.github.io ). Мне нужно, чтобы мои классы сериализовались в JSON (я использую Jackson). Я хочу пропустить необязательные поля в моем выходном JSON. Перед неизменяемыми я предоставил @JsonInclude(JsonInclude.Include.NON_EMPTY) на уровне класса.

Похоже, Immutables не учитывает эту аннотацию. Если я аннотирую каждое необязательное поле, @JsonInclude(JsonInclude.Include.NON_EMPTY) оно работает нормально.

Можно ли указать Immutables пропустить сериализацию пустых опций, используя аннотацию на уровне класса (не на уровне поля)? Я вижу org.immutables.value.Value.Style#additionalJsonAnnotations , но с ее помощью не настраивается переданная аннотация.

У меня есть jackson-datatype-jdk8 в моем пути к классу, и мой com.fasterxml.jackson.databind.ObjectMapper имеет

mapper.registerModule(новый Jdk8Module().configureAbsentsAsNulls(true));

Комментарии:

1. Используете ли вы github.com/FasterXML/jackson-datatype-jdk8 ?

2. ДА. Это работает, если я настрою @JsonInclude(JsonInclude. Включить. NON_EMPTY) на уровне поля, но библиотека Immutables не учитывает эту аннотацию на уровне класса.

3. Я не могу воспроизвести вашу проблему локально. Аннотирование моего неизменяемого класса с @JsonInclude помощью заставляет Джексона опускать пустое необязательное поле. Какую версию Immutables вы используете?

4. Проблема @Henrik действительно решена в последних неизменяемых файлах. Я опубликовал ответ на свой вопрос, пояснив это. Спасибо, что задали вопрос!

Ответ №1:

Проблема решена в неизменяемых файлах начиная с версии v2.3.6 (возможно, ранее). Immutables соблюдает @JsonInclude @JsonPropertyOrder и другие аннотации уровня класса (или уровня поля) от Jackson. Эти аннотации копируются в сгенерированный неизменяемый класс, и они работают должным образом.