#java #json #jackson #deserialization
#java #json #джексон #десериализация
Вопрос:
Я надеялся, что при использовании наследования я мог бы сократить шаблонный код, реализовав метод конструктора / конструктора по умолчанию в интерфейсе, например:
public interface IFace {
@JsonCreator
default <T extends IFace> T buildIFace(@ActualJsonTypeToBeConstructed Class<T> clazz,
@JsonProperty String someString) {
// calling some factory that constructs the actual type by string in a very generic manner
return null;
}
}
Аннотация @ActualJsonTypeToBeConstructed
— это всего лишь пример того, как это может быть возможно. В настоящее время это возможно, только если я скопирую один и тот же код в каждый класс и получу фактический тип, который будет создан там, но это именно то, чего я хочу избежать.
Итак, есть ли какой-нибудь способ перехватить фактический тип, который Джексон пытается десериализовать?
Или есть какой-то другой способ? Как и в Gson, я мог бы реализовать TypeAdapterFactory или около того.
Комментарии:
1. Ну, это трудно найти решение для поиска без его кодирования … вы также не можете использовать протокол для определения типа или не использовать JacksonMapper, вы думаете, что библиотека манипулирует json raw в памяти времени выполнения, например «org.json»??
2. Попробуйте получить доступ к данным с помощью org.json и используйте Builder patron для данных по умолчанию, вы получите что-то вроде jackson, если значение отсутствует, может быть нулевым или значением по умолчанию