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