Как использовать Jackson PropertyNamingStrategy с неизменяемой библиотекой

#java #jackson #immutability #immutables-library

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

Вопрос:

Я использую https://immutables.github.io / библиотека с Джексоном. Я хочу, чтобы мой класс был сериализуемым по Джексону. Я хотел бы использовать пользовательский PropertyNamingStrategy (настроенный для com.fasterxml.jackson.databind.ObjectMapper использования mapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);

К сожалению, библиотека Immutables помещает @JsonProperty("propertyName") в каждое поле сгенерированного кода. Это переопределяет PropertyNamingStrategy, определенную на уровне mapper (или на уровне класса, используя @com.fasterxml.jackson.databind.annotation.JsonNaming аннотацию).

Можно ли заставить библиотеку Immutables перестать указывать имя свойства для каждого поля (используя org.immutables.value.Value.Style или аналогичные средства)?

Я нашел обходной путь, поместив @JsonProperty (без значения) в каждое свойство, но меня это не устраивает.

Ответ №1:

Свойство Style forceJacksonPropertyNames=false не привязывает имена свойств к определенным строкам. Он работает со стратегиями именования, настроенными на уровне класса и на уровне картографа.

Введение в стили доступно здесь: http://immutables.github.io/style.html

Вы можете прочитать некоторую справочную информацию об этом параметре в выпусках: https://github.com/immutables/immutables/issues/431 https://github.com/immutables/immutables/issues/353

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

1. Спасибо! forceJacksonPropertyNames = false действительно имеет результат, который сгенерировал неизменяемый * класс, имеющий аннотации JsonProperty без имени. Это заставляет Джексона уважать стратегию именования моего com.fasterxml.jackson.databind. ObjectWriter или стратегия именования, установленная @JSONNAME на уровне класса. Было бы здорово, чтобы forceJacksonPropertyNames документировался на immutables.github.io/style.html страница. В настоящее время он не упоминается на этой странице, а весь org.immutables.value. Значение. Стиль не документируется в javadoc.

2. Сложно синхронизировать страницу документации и Javadoc, поэтому у них разные роли: страница служит введением в styles, где Javadoc является подробной (насколько это возможно) ссылкой. Извините, если это менее прозрачно, чем должно быть, мы постараемся это улучшить! Спасибо!