#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 является подробной (насколько это возможно) ссылкой. Извините, если это менее прозрачно, чем должно быть, мы постараемся это улучшить! Спасибо!