Поведение Джексона по умолчанию, кажется, использует и свойства (методы получения и установки) и поля для сериализации и десериализации в json.
Я хотел бы использовать поля в качестве канонического источника конфигурации сериализации и, следовательно, не хочу, чтобы Джексон смотрел на свойства вообще.
Я могу сделать это на индивидуальной основе класса с аннотацией:
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
Но я не хочу ставить это на каждый класс ...
Можно ли настроить это глобально? Как добавить некоторые в Object Mapper?
INFER_PROPERTY_MUTATORS
флага. Это заставляет видимость сеттеров, если есть видимый геттер или поле.Ответы:
Вы можете настроить отдельные ObjectMappers следующим образом:
Если вы хотите, чтобы он был установлен глобально, я обычно обращаюсь к настроенному преобразователю через класс-оболочку.
источник
withGetterVisibility
не охватываетis*
методы, но естьwithIsGetterVisibility
для них.setVisibilityChecker
устарела. ИспользуйтеsetVisibility
вместо этого.В Jackson 2.0 и более поздних версиях вы можете просто использовать:
отключить автоопределение.
источник
@JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
Далее вам нужно аннотировать каждое свойство, с которым вы хотите включить@JsonProperty
Специально для
boolean is*()
добытчиков:Я потратил много времени на то, почему ни ниже
ни это
работал для моего Boolean Getter / Setter.
Решение простое:
ОБНОВЛЕНИЕ: весенняя загрузка позволила настроить это:
См. Общие свойства приложения # JACKSON
источник
для джексона 1.9.10 использую
к повороту автоопределения.
источник
Как насчет этого: я использовал его с миксином
несоответствующий объект
Mixin:
Использование:
Ничто не говорит о том, что вы не можете учить любое количество классов и применять один и тот же миксин.
Если вы не знакомы с миксинами, они концептуально просты: структура миксина наложена на целевой класс (согласно Джексону, не так, как JVM).
источник
Если вы хотите сделать это глобально, не беспокоясь о своей конфигурации
ObjectMapper
, вы можете создать свою собственную аннотацию:Теперь вам просто нужно пометить свои классы,
@JsonExplicit
и вы готовы!Также не забудьте отредактировать приведенный выше вызов, чтобы
@JsonAutoDetect
убедиться, что у вас установлены значения, которые работают с вашей программой.Благодарим https://stackoverflow.com/a/13408807 за помощь в выяснении
@JacksonAnnotationsInside
источник
Если вы используете Spring Boot, вы можете настроить Джексона глобально следующим образом:
источник