无法使用 mongo 数据库中的 PojoCodecProvider 解码 属性 类型的 BasicDBList

Failed to decode property of type BasicDBList with PojoCodecProvider in mongo db

我想通过使用默认编解码器注册表 (MongoClient.getDefaultCodecRegistry()) 和构建器从 mongo 数据库加载 class "DataTable" 的实例由 PojoCodecProvider 提供。我已经在编解码器提供程序中注册了 DataTable class,当记录字段为空时,对象从数据库中正确映射。然而,当记录 属性 包含数据时,我得到一个错误。此外,我需要将记录字段定义为具有任意属性的对象列表。是否可以为此目的使用默认的 PojoCodecProvider?还有其他选择吗?

import com.mongodb.BasicDBList;
import org.bson.types.ObjectId;
import java.util.List;

public class DataTable {

    private ObjectId id;
    private List<String> fields;
    private BasicDBList records;

    public ObjectId getId() {
        return id;
    }
    public void setId(ObjectId id) {
        this.id = id;
    }
    public List<String> getFields() {
        return fields;
    }
    public void setFields(List<String> fields) {
        this.fields = fields;
    }
    public BasicDBList getRecords() {
        return records;
    }
    public void setRecords(BasicDBList records) {
        this.records = records;
    }
}

我在加载 DataTable class 实例时遇到的异常如下。

2018-03-21T16:32:04,526 [http-bio-8081-exec-4] ERROR ...service.controllers.BaseController - Failed to decode 'records'. Unable to set value for property 'records' in DataTable
org.bson.codecs.configuration.CodecConfigurationException: Failed to decode 'records'. Unable to set value for property 'records' in DataTable
    at org.bson.codecs.pojo.PojoCodecImpl.decodePropertyModel(PojoCodecImpl.java:192) ~[bson-3.6.3.jar:?]
    at org.bson.codecs.pojo.PojoCodecImpl.decodeProperties(PojoCodecImpl.java:168) ~[bson-3.6.3.jar:?]
    at org.bson.codecs.pojo.PojoCodecImpl.decode(PojoCodecImpl.java:122) ~[bson-3.6.3.jar:?]
    at org.bson.codecs.pojo.PojoCodecImpl.decode(PojoCodecImpl.java:126) ~[bson-3.6.3.jar:?]

当我尝试使用以下代码加载项目时出现此异常

DataTable item = collection.find(eq(new ObjectId(id))).first();

好吧,您可以使用的一种替代方法是 Jackson Serialization。 我觉得这样的东西很适合你

    Document document = collection
            .find(eq(new ObjectId(id)))
            .first();

    String json = document.toJson();
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    DataTable dataTable = mapper.readValue(json, DataTable.class);

参考这个问题converting Document objects in MongoDB 3 to POJOS