ไม่สามารถถอดรหัสคุณสมบัติของประเภท BasicDBList ด้วย PojoCodecProvider ใน mongo db

ฉันกำลังคาดว่าจะโหลดอินสแตนซ์ของคลาส "DataTable" จากฐานข้อมูล mongo โดยใช้รีจิสทรีตัวแปลงสัญญาณเริ่มต้น (MongoClient.getDefaultCodecRegistry()) และตัวสร้างที่จัดทำโดย PojoCodecProvider ฉันได้ลงทะเบียนคลาส DataTable ในผู้ให้บริการตัวแปลงสัญญาณแล้ว และวัตถุถูกแมปอย่างเหมาะสมจากฐานข้อมูลเมื่อฟิลด์บันทึกเป็นโมฆะ อย่างไรก็ตาม ฉันได้รับข้อผิดพลาดเมื่อคุณสมบัติบันทึกมีข้อมูล นอกจากนี้ ฉันจำเป็นต้องมีฟิลด์บันทึกที่กำหนดเป็นรายการออบเจ็กต์ที่มีคุณสมบัติที่กำหนดเอง เป็นไปได้ไหมที่จะใช้ 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 มีดังต่อไปนี้

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();

person Dimitris K.    schedule 21.03.2018    source แหล่งที่มา


คำตอบ (1)


ทางเลือกหนึ่งที่คุณสามารถใช้คือ 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);

ดูคำถามนี้ การแปลงอ็อบเจ็กต์ Document ใน MongoDB 3 เป็น POJOS สำหรับ อ้างอิง

person Ioannis Kalyvas    schedule 23.03.2018