我有两个简单的文档MyDocNestedDoc

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;
    }

    // ...

}


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#findAll

org.springframework.core.convert.ConverterNotFoundException:
No converter found capable of converting from type [java.lang.String]
to type [com.xmpl.NestedDoc]


预期支出:

当我调用MyMongoRepo#findByIdentifier时(如在RestController中),我得到类似以下内容:

{
    id: 123,
    nested: {
        identifier: "abc",
        stp: "SOME_CONSTANT",
    }
}


MyMongoRepo#findAll应该返回一个包含所有已知MyDocs的数组。

除了问题之外,首先了解为什么需要转换器将是很有趣的。需要转换字符串的幕后发生了什么?

最佳答案

您的数据库中有mongo文档,如下所示

{
    id: 1,
    nested: "somevalue"
}


而且spring无法将String转换为NestedDoc对象。

修复/删除文档,您应该可以。

10-05 22:09