Строка JSON, которую необходимо десериализовать, должна содержать информацию о типе параметра T
.
Вам нужно будет поместить аннотации Джексона в каждый класс, который может быть передан в качестве параметра T
классу, Data
чтобы информация о типе параметра T
могла быть прочитана / записана в строку JSON Джексоном.
Предположим, что это T
может быть любой класс, расширяющий абстрактный класс Result
.
class Data <T extends Result> {
int found;
Class<T> hits
}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT)
@JsonSubTypes({
@JsonSubTypes.Type(value = ImageResult.class, name = "ImageResult"),
@JsonSubTypes.Type(value = NewsResult.class, name = "NewsResult")})
public abstract class Result {
}
public class ImageResult extends Result {
}
public class NewsResult extends Result {
}
После того, как каждый класс (или их общий супертип), который может быть передан в качестве параметра T
, аннотирован, Джексон включит информацию о параметре T
в JSON. Затем такой JSON можно десериализовать, не зная параметра T
во время компиляции.
Эта ссылка на документацию Джексона говорит о полиморфной десериализации, но также полезна для ответа на этот вопрос.