Как изменить Джексона, чтобы он обнаруживал все поля в POJO, кроме общедоступных?

При использовании Spring Boot для проекта Джексон стал по умолчанию сериализовать объекты обратно и из Jsons. Я понимаю, что Джексон терпит неудачу, если у вас нет общедоступных средств доступа, например, геттеров/сеттеров или общедоступных полей в вашем POJO.

Поведение отличается, когда я переключаюсь на Gson. Он обнаруживает все поля независимо от их видимости. По этой причине я остановился на Gson.

Я чувствовал себя немного неловко из-за переключения правил доступа к POJO; Это потребовало бы некоторого рефакторинга в структуре проекта.

Итак, проблем с использованием Gson нет, но есть ли способ изменить поведение Джексона?


person Luciano Callero    schedule 01.03.2020    source источник


Ответы (2)


Джексон поддерживает чтение значений из закрытых полей-членов, но не делает этого по умолчанию.

Вы можете настроить поведение глобально в конфигурации Spring Boot, например

jackson:
  visibility.field: any
  visibility.getter: none
  visibility.setter: none
  visibility.is-getter: none

(эта конфигурация будет искать только поля-члены и больше не будет проверять методы get, set и is)

Вы также можете использовать аннотацию @JsonAutoDetect, чтобы сделать ту же настройку для определенного класса.

person Roland Kreuzer    schedule 01.03.2020
comment
Спасибо за ответы. Я нашел решение для аннотации по этой ссылке. Тем не менее, ваша альтернатива конфигурации Spring Boot кажется еще лучше. Мне нужно только изменить поведение только в одном месте, вместо того, чтобы распространять аннотации повсюду. - person Luciano Callero; 03.03.2020

Попробуйте установить видимость на уровне ObjectMapper,

ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE);
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
person Pritesh Ladhe    schedule 01.03.2020