MongoDB Java插入引发org.bson.codecs.configuration.CodecConfigurationException:找不到类io.github.ilkgunel.mongodb.Pojo的编解码器

我正在用Java学习MongoDB。 我正在尝试使用Java驱动程序将数据插入MongoDB。 我正在插入像MongoDB教程一样,每件事都很好。 但是,如果我想插入一个变量,当我运行代码时,驱动程序会抛出这样的错误:

org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class io.github.ilkgunel.mongodb.Pojo. 

我在Stack Overflow中解决了这样的问题,但我无法理解任何内容,我找不到任何解决此错误的方法。 我的代码如下。 怎么能解决这个问题?

我正在使用此代码:

 package io.github.ilkgunel.mongodb; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Locale; public class MongoDBBasicUsage { public static void main(String[] args) { MongoClient mongoClient; try { Pojo pojo = new Pojo(); mongoClient = new MongoClient("localhost", 27017); MongoDatabase database = mongoClient.getDatabase("MongoDB"); pojo.setId("1"); pojo.setName("ilkay"); pojo.setSurname("günel"); Document document = new Document(); document.put("person", pojo); database.getCollection("Records").insertOne(document); } catch (Exception e) { System.err.println("Bir Hata Meydana Geldi!"); System.out.println("Hata" + e); } } } 

我的Pojo是这样的:

  package io.github.ilkgunel.mongodb; public class Pojo { String name; String surname; String id; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; } public String getId() { return id; } public void setId(String id) { this.id = id; } } 

从你想要做的事情来看,你试图添加一些自定义数据类型(在这种情况下是你的POJO),但你需要记住的是文档中的字段只能接受某些数据类型,而不是直接接受对象。

如果你也不知道,Mongo Documents的结构与json相同。 因此,您必须通过创建字段并将值插入其中来明确地创建文档。 值字段中允许使用特定数据类型:

http://mongodb.github.io/mongo-java-driver/3.0/bson/documents/

为了帮助解决您的问题,下面的代码将您的POJO作为参数并了解POJO的结构,返回可插入到您的集合中的Mongo文档:

 private Document pojoToDoc(Pojo pojo){ Document doc = new Document(); doc.put("Name",pojo.getName()); doc.put("Surname",pojo.getSurname()); doc.put("id",pojo.getId()); return doc; } 

这应该适用于插入。 如果要索引其中一个字段:

 database.getCollection("Records").createIndex(new Document("id", 1)); 

我希望这能回答你的问题并为你效劳。

您需要配置CodeRegistry以使用PojoCodecProvider,如下所述: http ://mongodb.github.io/mongo-java-driver/3.7/driver/getting-started/quick-start-pojo/

你检查了mongodb的库吗? 我在今天早上通过将mongodb java驱动程序从3.2.2更改为3.4.2来解决这个问题。 这样的新maven:

  org.springframework.boot spring-boot-starter-data-mongodb 1.5.4.RELEASE  

尝试和回应