Spring 原因:org.bson.codecs.configuration.CodecConfigurationException:Can';找不到com.example.com类的编解码器

Spring 原因:org.bson.codecs.configuration.CodecConfigurationException:Can';找不到com.example.com类的编解码器,spring,spring-data-mongodb,Spring,Spring Data Mongodb,如何使用BSONObject插入嵌入的文档?当我试图插入嵌入的文档时,出现如下错误 例如,我想为Date和firstName保存空值。我使用SpringDataMongo尝试了一些选项,但效果不太好 我得到以下错误: java.lang.IllegalStateException: Failed to execute CommandLineRunner at org.springframework.boot.SpringApplication.callRunner(SpringAppli

如何使用
BSONObject
插入嵌入的文档?当我试图插入嵌入的文档时,出现如下错误

例如,我想为Date和firstName保存空值。我使用SpringDataMongo尝试了一些选项,但效果不太好

我得到以下错误:

java.lang.IllegalStateException: Failed to execute CommandLineRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:816) [spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:797) [spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:324) [spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
    at com.example.MongoPocApplication.main(MongoPocApplication.java:24) [classes/:na]
Caused by: org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class com.example.Hobbies.
    at org.bson.codecs.configuration.CodecCache.getOrThrow(CodecCache.java:46) ~[bson-3.8.2.jar:na]
    at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:63) ~[bson-3.8.2.jar:na]
    at org.bson.codecs.configuration.ChildCodecRegistry.get(ChildCodecRegistry.java:51) ~[bson-3.8.2.jar:na]
    at com.mongodb.DBObjectCodec.writeValue(DBObjectCodec.java:231) ~[mongodb-driver-core-3.8.2.jar:na]
    at com.mongodb.DBObjectCodec.encodeIterable(DBObjectCodec.java:292) ~[mongodb-driver-core-3.8.2.jar:na]
    at com.mongodb.DBObjectCodec.writeValue(DBObjectCodec.java:219) ~[mongodb-driver-core-3.8.2.jar:na]
    at com.mongodb.DBObjectCodec.encode(DBObjectCodec.java:149) ~[mongodb-driver-core-3.8.2.jar:na]
    at com.mongodb.DBObjectCodec.encode(DBObjectCodec.java:65) ~[mongodb-driver-core-3.8.2.jar:na]
    at com.mongodb.BasicDBObject.toJson(BasicDBObject.java:194) ~[mongodb-driver-core-3.8.2.jar:na]
    at com.mongodb.BasicDBObject.toJson(BasicDBObject.java:167) ~[mongodb-driver-core-3.8.2.jar:na]
    at com.mongodb.BasicDBObject.toJson(BasicDBObject.java:154) ~[mongodb-driver-core-3.8.2.jar:na]
    at com.mongodb.BasicDBObject.toString(BasicDBObject.java:238) ~[mongodb-driver-core-3.8.2.jar:na]
    at java.lang.String.valueOf(String.java:2994) ~[na:1.8.0_171]
    at java.io.PrintStream.println(PrintStream.java:821) ~[na:1.8.0_171]
    at com.example.MongoPocApplication.savePersons(MongoPocApplication.java:70) [classes/:na]
    at com.example.MongoPocApplication.run(MongoPocApplication.java:34) [classes/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:813) [spring-boot-2.1.4.RELEASE.jar:2.1.4.RELEASE]
Person.java

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document
public class Person {
    @Id
    private String id;
    @Field
    private String firstName;
    @Field
    private String lastName;

    @Field
    private String emailId;
    @Field
    private List<Hobbies> hobbies;
}
主要


我能够像下面这样解决这个问题。我想知道我们是否可以使用SpringDataMongo存储库查询来实现这一点

Document hobbies1 = new Document();
hobbies1.put("interest", "Indoor");
hobbies1.put("sports", "Chess");

Document hobbies2 = new Document();
hobbies2.put("Loveoor", "Table Tennis");
hobbies2.put("Gamedoor", "Cricket");

BSONObject personBsonObj = BasicDBObjectBuilder.start()
    .add("firstName","John")
    .add("lastName", null)
    .add("email","john.kerr@gmail.com")
    .add("hobbies",Arrays.asList(hobbies1, hobbies2)).get();
BSONObject insert = mongoTemplate.insert(personBsonObj,"person");
    System.out.println(insert);

我在我的一门课上发现了同样的问题。问题是,您为bean声明了多个构造函数。不知道为什么,以及如何与异常消息关联

@AllArgsConstructor
@NoArgsConstructor
这里的问题不是Lombok,而是Lombok在类中插入了两个构造函数:

public Person(String id, 
              String firstName, 
              String lastName, 
              String emailId,
              List<Hobbies> hobbies) { /* ... */ }

public Person() { /* ... */ }
公众人物(字符串id,
字符串名,
字符串lastName,
字符串emailId,
列出爱好){/*…*/}
公众人士(){/*…*/}
删除两个构造函数中的一个,编解码器的问题就会消失


我希望能有所帮助。

不幸的是,我无法复制这个问题。我可以知道使用的spring启动版本和mongo驱动程序版本吗?请看这里。我尝试使用mongo 3.8.x驱动程序,它通过了启动版本2.1.3.RELEASE,我保留了Spring MongoDB starter的所有功能,因为依赖Jards您的代码没有嵌入文档。请你尝试一下和我一样的东西好吗?这是示例链接,请分享代码来重现这个问题。您是否构建了MongoTemplate?@Barath-很抱歉最近的回复。我已经更新了帖子并上传了代码
@AllArgsConstructor
@NoArgsConstructor
public Person(String id, 
              String firstName, 
              String lastName, 
              String emailId,
              List<Hobbies> hobbies) { /* ... */ }

public Person() { /* ... */ }