MongoDBでのSpringデータの使用。コンストラクタ引数とスプリングデータのデシリアライゼーションの問題
問題は、コンストラクタに実際にネストされたオブジェクトの内部にある引数があるため、Mongoから取得したBeanをインスタンス化することです。持続性は問題ではありません。検索はIsです。
クラス構造は以下のようになります。ここで、BはAの内側にネストされます。Aは、そのコンストラクタParamsの1つを使用してBをインスタンス化します。内部にネストされ
クラスA
Class A{
int prop1;
B b;
@JsonCreator
public A( @JsonProperty int prop1, @JsonProperty int prop2){
this.prop1 = prop1;
this.b = new B(prop2);
}
}
クラスBオブジェクトは、以下のJSON形式でREST APIによって受信される
Class B(){
int prop2;
@JsonCreator
public B(@JsonProperty int prop2){
this.prop2 = prop2;
}
}
:
{"prop1":"Hello1","prop2":"Hello2"}
スプリングコントローラが受信しますそれをObject Aに正しくマップします。Springはデフォルトで引数なしのコンストラクタを使用するので、私はjsoncreatorを使ってarg-constructorの表記法であり、MongoDBに追加されています。
データは、適切なBean構造ごとに以下の形式で格納されます。
問題:Mongoから取得しようとするとエラーが発生します。それは言う:
org.springframework.data.mapping.model.MappingException: No property prop2
found on entity class A to bind constructor parameter to
私はSpringDataからSpringDataを取得するときにprop2を含むオブジェクトBを使用するようにSpringDataに指示できますか?
public A(int prop1, B b){
......
......
}
が1つの以上のコンストラクタを追加するObjectMapperで動作します:
私は多分、私は以下のようなコンストラクタの引数の1つとして、オブジェクトBを使用してトリックを、行いますもう一つのコンストラクタを追加する考えは(おそらく可能ではないthatsの) SpringDataでは再びそうではありません。
新しい例外がスローされます。この時間は:
org.springframework.data.mapping.model.MappingInstantiationException:
Failed to instantiate A using constructor NO_CONSTRUCTOR with
arguments.
私はリスト/使用されていない使用されている上記のエラーをチェックしますが、私は両方の方法とdidntの決意を試してみました。
注:オブジェクトBは他の多くのBeanで使用される共通のプロパティを含んでいるためネストされています(抽象クラスでも可能ですが、後で試してみる必要がありますが、
SpringDataはオブジェクトAをどのように作成しますか?