Как изменить Джексона, чтобы он обнаруживал все поля в POJO, кроме только опубликованных c? - PullRequest
0 голосов
/ 01 марта 2020

При использовании Spring Boot для проекта по умолчанию Джексон пришел для сериализации объектов обратно и из Jsons. Я понимаю, что Джексон потерпит неудачу, если в вашем POJO нет полей доступа publi c, например, полей getter / setters или publi c.

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

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

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

Ответы [ 2 ]

2 голосов
/ 01 марта 2020

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

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

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

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

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

1 голос
/ 01 марта 2020

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

ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE);
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
...