Я работаю со структурой, которая выполняет сериализацию Java Jackson класса Config
с полем supplier
, которое является абстрактным интерфейсом Supplier<T>
. Приведенные ниже интерфейсы определены в платформе, поэтому я не могу изменить / добавить аннотации.
public interface Supplier<T> {
T get();
}
public interface Calculator {
}
@Data
@NoArgsConstructor
public class Config extends Serializable {
private Supplier<Calculator> supplier;
}
У меня есть конкретная реализация Supplier
:
class MySupplier implements Supplier {
@Override Calculator get() { return ...; }
}
Когда я сериализирую экземпляр Config
в JSON, поле поставщика сериализуется без информации о классе. Из того, что я понимаю, это потому, что объявление поля является абстрактным. В результате во время десериализации Джексон не знает, как создать экземпляр поля supplier
.
"config" : {
...
"supplier" : { }
...
}
Как я могу заставить мою реализацию интерфейса Supplier
добавить информацию об имени класса в сгенерированный JSON, чтобы обеспечить надлежащую десериализацию? У меня нет доступа к коду, который выполняет сериализацию и десериализацию, я могу манипулировать только моей реализацией Supplier
.