[英]Can't find a codec for my class (CodecConfigurationException)
[英]Can't find a codec for my class
我有一個名為 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 類的編解碼器。
我在這里檢查了一個類似的問題,但插入代碼不同。 我從答案中得到了提示並修改了我的方法,但它看起來並不干凈。 修改方法如下:
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;
}
}
您需要配置一個CodecRegistry
來管理從 bson 到您的CodecRegistry
的轉換:
MongoClientURI connectionString = new MongoClientURI("mongodb://localhost:27017");
MongoClient mongoClient = new MongoClient(connectionString);
CodecRegistry pojoCodecRegistry = org.bson.codecs.configuration.CodecRegistries.fromRegistries(MongoClientSettings.getDefaultCodecRegistry(), org.bson.codecs.configuration.CodecRegistries.fromProviders(PojoCodecProvider.builder().automatic(true).build()));
MongoDatabase database = mongoClient.getDatabase("testdb").withCodecRegistry(pojoCodecRegistry);
PS:您可以靜態導入org.bson.codecs.configuration.CodecRegistries.fromRegistries
和org.bson.codecs.configuration.CodecRegistries.fromProviders
。
一個完整的例子可以在github 中找到。
Mongodb java 驅動程序文檔還包含一篇關於管理pojos的文章(該鏈接適用於 3.8.0 驅動程序版本)。
按照上述文檔操作后,如果仍然出現錯誤,則
您可以在您的收藏中使用通用文檔,例如
class DocStore {
String docId:
String docType;
Object document; // this will cause the BSON cast to throw a codec error
Map<String, Object> document; // this won't
}
而且,您仍然希望將文檔從POJO 轉換為Map
mkyong來救援。
至於獲取,它按預期工作,但您可能希望從 Map 轉換到您的 POJO 作為后處理步驟,我們可以在這里找到一些好的答案
希望能幫助到你! 🙂️
你有沒有注釋你的 Java 類? 看起來您需要在類上方使用 @Entity ,在 ID 字段上方使用 @Id 。
按照 POJO 的快速入門指南進行操作。 您需要注冊編解碼器才能將您的 POJO(Plain Old Java Object)翻譯成/從 BSON: http : //mongodb.github.io/mongo-java-driver/3.7/driver/getting-started/quick-開始-pojo/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.