Десериализовать JSON для класса, которым я не владею, с помощью пользовательских методов получения - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь десериализовать объект класса, который мне не принадлежит.У класса есть имена атрибутов, такие как id_, address_, name_, но его получатели getId() getAddress() getName () и т. Д.

Когда я пытаюсь десериализовать JSON с помощьюДжексон, я получаю

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "id_", not marked as ignorable

Похоже, это происходит потому, что Джексон ищет getId_() вместо getId().Поскольку я не являюсь владельцем базового класса, я не могу использовать аннотации Джексона для сопоставления атрибутов с настраиваемыми полями JSON.

Как можно десериализовать с помощью настраиваемого сопоставления атрибутов объекта его методам получения?

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Вы можете применить MixIn для Джексона - вот как я решил мою проблему, пытаясь сериализовать и десериализовать JSON для автоматически сгенерированного класса AVRO ( Проблема сгенерированного Avro класса с преобразованием json [kotlin] )

Вот пример:

https://medium.com/@shankar.ganesh.1234/jackson-mixin-a-simple-guide-to-a-powerful-feature-d984341dc9e2

0 голосов
/ 25 июня 2019

Вы можете попробовать собственный десериализатор.

checkout: https://www.baeldung.com/jackson-deserialization

Таким образом, вы можете зарегистрировать десериализатор для класса.

Тем не менее, у вас все еще естьредактировать его при изменении класса.

Еще одна вещь, которую вы можете попробовать:

mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);

Это даст мапперу полный доступ к закрытым членам.

...