私は残りのリポジトリ行動の微調整のためにRepositoryRestMvcConfiguration
を使用しています:RepositoryRestMvcConfigurationのObjectMapperとSpringBootのデフォルトのObjectMapperを比較しますか?
@Configuration
public class WebConfig extends RepositoryRestMvcConfiguration {
@Override
protected void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
config.setReturnBodyOnCreate(true);
}
欠点は、拡張されたクラスはconfictsがhereを説明引き起こし、独自のObjectMapper豆にもたらしています。推奨される回避策は、拡張クラスを使用してObjectMapper Beanを@Primary
とマークすることですが、RepositoryRestMvcConfiguration
のBeanはネストしたエンティティを直列化している間に異なる動作をします。
のは、以下のenitites仮定しましょう:春ブーツObjectMapperが期待される結果を与えるデフォルトを使用して
@Entity class Parent {
@Id Long id;
@OneToMany @JsonManagedReference List<Child> children;
// usual getters and setters for fields...
}
@Entity class Child {
@Id Long id;
@ManyToOne @JsonBackReference Parent parent;
@ManyToOne @JsonBackReference School school;
public getSchooldId() { return school.getId(); }
// usual getters and setters for fields...
}
@Entity class School {
@Id Long id;
@OneToMany @JsonManagedReference List<Child> children;
// usual getters and setters for fields...
}
を(ネストされた実体がレンダリングされます):
{"id": 1, "children":[{"id":2, "schoolId":7},{"id":3, "schooldId":8}]}
RepositoryRestMvcConfiguration
からObjectMapperが子実体を無視しかし、 :
{"id": 1}
RepositoryRestMvcConfiguration
ObjectMapperをSpring Bootのデフォルトと同じ動作に設定する正しい方法はありますか?
これは残念なことに、役に立たない。 objectMapperは、例えば、他のスプリングブートコードによってAutowired'(org.springframework.boot.actuate.autoconfigure.EndpointMBeanExportAutoConfigurationにおけるコンストラクタ)@ 2)halObjectMapperは \t '@Override @Beanを使用してデフォルトにすることができる'も 1) @Primary \t public ObjectMapper objectMapper(){ \t \t return super.halObjectMapper(); \t} ' でも、他のオブジェクトと同じ結果が得られます。マッパーネストされたエンティティはJSONにレンダリングされません – Michal
これで問題は分かりました。 –
これは、Spring Data Restリポジトリのエンドポイントでは有効ですが、スタンドアロンのObjectMapper(コントローラで自動実行など)では使用できません。デフォルトのObjectMapper( 'RepositoryRestMvcConfiguration'が拡張されていないときにautowiringによって利用可能)は、投影さえなくてもネストされたエンティティを期待どおりにレンダリングします。 設定目的で 'RepositoryRestMvcConfiguration'を拡張するとすぐに、objectMapper/halObjectMapperはスタンドアロンモードで使用されたときにネストされたエンティティをレンダリングしなくなりました。 – Michal