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