【发布时间】:2018-04-14 13:02:58
【问题描述】:
我有一个名为 Signal 的简单类。类如下所示:
public class Signal {
private String id;
private Date timestamp;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Date getTimestamp() {
return timestamp;
}
public void setTimestamp(Date timestamp) {
this.timestamp = timestamp;
}
}
我正在尝试在 MongoDB (v3.4) 中插入信号。我正在使用以下方法插入:
public boolean xyz(Signal signal) {
try {
DatabaseConnection databaseConnection =DatabaseConnection.getInstance();
MongoClient mongoClient = databaseConnection.getMongoClient();
MongoDatabase db = mongoClient.getDatabase("myDb");
MongoCollection<Signal> collection = db.getCollection("myCollection", Signal.class);
collection.insertOne(signal);
return true;
} catch (Exception e){
logger.error("Error", e);
return false;
}
}
我收到以下异常:
org.bson.codecs.configuration.CodecConfigurationException:找不到 in.co.mysite.webapi.models.Signal 类的编解码器。
我检查了一个类似的问题here,但插入代码不同。我从答案中得到了提示并修改了我的方法,但它看起来并不干净。修改方法如下:
public boolean xyz(Signal signal) {
try {
DatabaseConnection databaseConnection =DatabaseConnection.getInstance();
MongoClient mongoClient = databaseConnection.getMongoClient();
MongoDatabase db = mongoClient.getDatabase("myDb");
MongoCollection<Document> collection = db.getCollection("myCollection");
Document doc = new Document();
doc.put("id", signal.getId());
doc.put("timestamp", signal.getTimestamp());
doc.put("_id", new ObjectId().toString());
collection.insertOne(doc);
return true;
} catch (Exception e){
logger.error("Error", e);
return false;
}
}
【问题讨论】:
-
您可以尝试为模型定义您的自定义
Codec。 -
@nullpointer 我还没有为 pojo 类编写编解码器。请您指出正确的方向吗?
-
这是一个提示,我相信你知道你可以尝试,如果那里不起作用,回到 SO ;)