Я пытаюсь загрузить экземпляр класса DataTable из базы данных mongo, используя реестр кодеков по умолчанию (MongoClient.getDefaultCodecRegistry()) и построитель, предоставленный PojoCodecProvider. Я зарегистрировал класс DataTable в поставщике кодеков, и объект правильно отображается из базы данных, когда поле записей имеет значение null. Тем не менее, я получаю сообщение об ошибке, когда свойство records содержит данные. Кроме того, мне нужно, чтобы поле записей было определено как список объектов с произвольными атрибутами. Можно ли для этой цели использовать 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();