У меня есть 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.
Если переменные являются частными, джексон использует геттеры/сеттеры. Если они публичные, вы можете сделать это с аннотациями. Не требуется специальный десериализатор. – tom
Какие аннотации? У меня есть все переменные, аннотированные с помощью JsonProperty. – user2992188
Аннотируйте свои методы getter вместо частных переменных ... – MattR