Можно ли определить тип, который будет создан при использовании @JsonCreator для десериализации в Jackson?

#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, если значение отсутствует, может быть нулевым или значением по умолчанию