Java 如何专门化编解码器以反序列化具有参数化类型的顶级类?

Java 如何专门化编解码器以反序列化具有参数化类型的顶级类?,java,mongodb,Java,Mongodb,我有一个MongoDB聚合管道,其中有$facet用于对结果进行分页。结果是两个字段:totalRows(整数)和currentPage(数组) 我想将此结果映射到Pojo中: @Data public class PaginatedResults<T> { private List<T> currentPage; private Integer totalCount; } 如何指示编解码器使用特定类将PaginatedResults中的属性cur

我有一个MongoDB聚合管道,其中有$facet用于对结果进行分页。结果是两个字段:totalRows(整数)和currentPage(数组)

我想将此结果映射到Pojo中:

@Data
public class PaginatedResults<T> {

    private List<T> currentPage;

    private Integer totalCount;

}

如何指示编解码器使用特定类将
PaginatedResults
中的属性
currentPage
反序列化为
列表?

您可以注册自定义转换器

@配置
公共类转换器{
@豆子
公共MongoCustomConversions MongoCustomConversions(){
返回新的MongoCustomConversions(
Arrays.asList(
新的分页结果转换器());
}
}
@读取转换器
公共类PaginatedResultsConverter实现转换器{
@凌驾
公共分页结果转换(文档源){
//在此处手动实现分页结果
}
}

您可以注册自定义转换器

@配置
公共类转换器{
@豆子
公共MongoCustomConversions MongoCustomConversions(){
返回新的MongoCustomConversions(
Arrays.asList(
新的分页结果转换器());
}
}
@读取转换器
公共类PaginatedResultsConverter实现转换器{
@凌驾
公共分页结果转换(文档源){
//在此处手动实现分页结果
}
}

但是如何在转换器中处理分页结果的参数化类型?必须手动处理。例如:
stringtype=(String)source.get(“type”);开关(类型){case“Point”:返回新的PaginatedResults();case“LineString”:返回新的PaginatedResults();;
但是如何处理转换器中PaginatedResults的参数化类型?您必须手动处理它。例如:
String type=(String)source.get(“type”);开关(类型){case“Point”:返回新的分页结果();case“LineString”:返回新的分页结果();
@Data
public class PaginatedResults<T> {

    private List<T> currentPage;

    private Integer totalCount;

}

PaginatedResults contains generic types that have not been specialised.
Top level classes with generic types are not supported by the PojoCodec.
@Configuration
public class Converters {

  @Bean
  public MongoCustomConversions mongoCustomConversions() {

    return new MongoCustomConversions(
        Arrays.asList(
            new PaginatedResultsConverter()));
  }
}


@ReadingConverter
public class PaginatedResultsConverter implements Converter<Document, PaginatedResults<T>> {
    @Override
    public PaginatedResults convert(Document source) {
       //implement PaginatedResults manually here
    }
}