Gagal memecahkan kode properti tipe BasicDBList dengan PojoCodecProvider di mongo db

Saya ingin memuat instance kelas "DataTable" dari database mongo dengan menggunakan registri codec default (MongoClient.getDefaultCodecRegistry()) dan pembuat yang disediakan oleh PojoCodecProvider. Saya telah mendaftarkan kelas DataTable di penyedia codec dan objek dipetakan dengan benar dari database ketika bidang catatan adalah nol. Namun demikian, saya mendapatkan kesalahan ketika properti catatan berisi data. Selain itu, saya perlu menetapkan bidang catatan sebagai daftar objek dengan atribut arbitrer. Apakah mungkin menggunakan PojoCodecProvider default untuk tujuan ini? Apakah ada alternatif lain?

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;
    }
}

Pengecualian yang saya dapatkan saat memuat instance kelas DataTable adalah sebagai berikut.

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:?]

Saya mendapatkan pengecualian ini ketika saya mencoba memuat item dengan kode berikut

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

person Dimitris K.    schedule 21.03.2018    source sumber


Jawaban (1)


Nah, salah satu alternatif yang bisa Anda gunakan adalah Jackson Serialization. Menurutku hal seperti ini akan cocok untukmu

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

Lihat pertanyaan ini mengonversi objek Dokumen di MongoDB 3 ke POJOS untuk referensi

person Ioannis Kalyvas    schedule 23.03.2018