Java Spring MongoRepository#findall:ConverterNotFoundException
我有两个简单的文档Java Spring MongoRepository#findall:ConverterNotFoundException,java,spring,mongodb,spring-data,spring-mongodb,Java,Spring,Mongodb,Spring Data,Spring Mongodb,我有两个简单的文档MyDoc和NestedDoc MyDoc: public class MyDoc { @Id private final String id; private final NestedDoc nested; public MyDoc (MyIdentifier myIdentifier, Nested nested) { this(myIdentifier.toString(), new
MyDoc
和NestedDoc
MyDoc
:
public class MyDoc {
@Id
private final String id;
private final NestedDoc nested;
public MyDoc (MyIdentifier myIdentifier, Nested nested) {
this(myIdentifier.toString(),
new NestedDoc(nested.getIdentifier(), nested.getStp()));
}
@PersistenceConstructor
public MyDoc (String id, NestedDoc nestedDoc) {
this.id = id;
this.nestedDoc = nestedDoc;
}
// ...
}
public class NestedDoc {
private final String identifier;
private final Stp stp; // is an enum
@PersistenceConstructor
public NestedDocDoc (String identifier, Stp stp) {
this.identifier = identifier;
this.stp = type;
}
// ...
}
NestedDoc
:
public class MyDoc {
@Id
private final String id;
private final NestedDoc nested;
public MyDoc (MyIdentifier myIdentifier, Nested nested) {
this(myIdentifier.toString(),
new NestedDoc(nested.getIdentifier(), nested.getStp()));
}
@PersistenceConstructor
public MyDoc (String id, NestedDoc nestedDoc) {
this.id = id;
this.nestedDoc = nestedDoc;
}
// ...
}
public class NestedDoc {
private final String identifier;
private final Stp stp; // is an enum
@PersistenceConstructor
public NestedDocDoc (String identifier, Stp stp) {
this.identifier = identifier;
this.stp = type;
}
// ...
}
有一个直接的存储库:
public interface MyMongoRepo extends MongoRepository<MyDoc, String> {
default MyDoc findByIdentifier (MyIdentifier identifier) {
return findOne(identifier.toString());
}
}
预期产出:
当我调用MyMongoRepo#findbyidentier
(就像在RestController中一样)时,我得到如下结果:
{
id: 123,
nested: {
identifier: "abc",
stp: "SOME_CONSTANT",
}
}
而MyMongoRepo#findAll
应该返回一个包含所有已知MyDocs的数组
除了这个问题之外,了解为什么首先需要转换器也很有趣。需要转换字符串的引擎盖下会发生什么情况?数据库中的mongo文档如下所示
{
id: 1,
nested: "somevalue"
}
spring无法将String
转换为NestedDoc
对象
修复/删除该文档,您应该会没事。为什么我没想到?!太明显了!哈哈,谢谢你。在我的应用程序中,我有多个存储库,在启动时,我通常会删除所有集合。忘了那笔回购交易的那一行。因此,我有早期
嵌套的版本的过时文档,它们是简单的字符串。。。天啊,我现在恨我自己!