#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. Эти аннотации копируются в сгенерированный неизменяемый класс, и они работают должным образом.