2013-12-11 3 views
1

У меня есть pojo, которое заполняет скрытую переменную при вызове ее методов setter.Java - Deserialize с использованием геттеров/сеттеров вместо отражения

Мой POJO практически идентичен: Gson POJO mapping loses custom field value

Я использую джексон 1.9.6 в моем проекте JAX-RS. Когда выполняется вызов REST, он потребляет JSON и автоматически преобразует его в экземпляр pojo. Я считаю, что Джексон использует рефлексию для этого. Причина, по которой это плохо для меня, состоит в том, что отражение обходит методы сеттера, и моя скрытая переменная никогда не заселена.

Как сообщить джексону, чтобы избежать отражения, и специально вызвать методы получения/установки? Должен ли я помечать каждое pojo с помощью @JsonDeserialize? Если да, то как мне написать общий Deserializer (aka MyDeserializer extends JsonDeserializer<T>) для обработки разных pojos? Есть ли лучший способ, о котором я не думаю?

Примечание: В тестовых случаях (вне REST) ​​у меня был успех, используя ObjectMapper.readValue(json,class), но я не уверен, как перенести этот код в JsonDeserializer.

+0

Если переменные являются частными, джексон использует геттеры/сеттеры. Если они публичные, вы можете сделать это с аннотациями. Не требуется специальный десериализатор. – tom

+0

Какие аннотации? У меня есть все переменные, аннотированные с помощью JsonProperty. – user2992188

+0

Аннотируйте свои методы getter вместо частных переменных ... – MattR

ответ

0

У меня была проблема, подобная этой: я использовал Retrofit, а Jackson и десериализацию ключа JSON всегда игнорировал мой аннотированный сеттер и использовал отражение на частных полях и никогда ничего не устанавливал. Оказывается, драгоценность необходимой мне информации (RTFM) заключалась в том, что Retrofit использует GSON по умолчанию, и это поведение GSON. Джексон не привык к десериализации.

Итак, вам нужно написать преобразователь для дооснащения, который использует Джексон. Пример этого можно найти здесь: http://kdubblabs.com/java/retrofit-by-square/retrofit-using-jackson-json-conversion/

Смежные вопросы