2017-09-13 7 views
0

私は2枚の簡単な書類MyDocNestedDoc春MongoRepositoryの#1のfindAll:ConverterNotFoundException

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

    // ... 

} 

私はMyMongoRepo#findAllを呼び出すときに

は今、私はOutpout期待

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

を得る:

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

MyMongoRepo#findAll:私は(RestControllerのように)MyMongoRepo#findByIdentifierを呼び出すと

私のような何かを得ますすべての既知のMyDocsを含む配列を返す必要があります。

この問題に加えて、なぜコンバータが最初に必要なのかを知ることは興味深いでしょう。変換する文字列を必要とするフードの下ではどうなりますか?

答えて

1

あなたが

以下
{ 
    id: 1, 
    nested: "somevalue" 
} 

ようになり、春がNestedDocオブジェクトにStringの変換に失敗したデータベース内のmongo文書を持っています。

文書を修正/削除しても問題ありません。

+0

なぜ私はそれを考えなかったのですか?それはとても明らかです!ハハ、ありがとう。私のアプリケーションでは複数のリポジトリがあり、起動時には通常すべてのコレクションを削除します。その特定のレポの行を忘れてしまった。だから、私は以前のネストされたバージョンの文書が単純な文字列だった時代遅れだった...神様、私は今自分自身が嫌いです! –

関連する問題