Конечно, Джексон не может вывести полностью заполненный объект Person
, представляющий супруга из числа 2
.Скорее всего, вам потребуется зарегистрировать пользовательский десериализатор, который проверяет, является ли ввод целым числом, и, если это так, ищет супруга, где бы он ни хранился.Я не делал такого рода вещей для классов, которые содержат ссылки на себя (например, ваш Person
содержит Person
), поэтому я могу дать вам только приблизительное руководство.
Я считаю, что это может работать только с Джексономверсия 1.9
или выше.По сути, вы можете зарегистрировать модуль в сопоставителе объектов, который говорит Джексону использовать собственный десериализатор.
SimpleModule module = new SimpleModule("PeopleModule", new Version(1, 1, 0, null);
module.addDeserializer(Person.class, new JacksonPersonDeserializer());
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(module);
В качестве альтернативы для самого класса Person
вы можете сделать что-то вроде:
class Person {
@JsonDeserialize(using=JacksonPersonDeserializer.class)
Person spouse;
}
Это работает до 1.9
, но загрязняет ваш объект.В любом случае вам нужно написать собственный десериализатор.