2015-12-30 13 views
9

Springはバージョン4.1以降の@JsonViewをサポートしています。複数の識別子を持つSpringと@JsonView

java.lang.IllegalArgumentException: @JsonView only supported for request body advice with exactly 1 class argument: org.[email protected]a566e37e 

はどうやらJsonViewResponseBodyAdviceJavadocに応じて、以下が真である:

@RestControllerで注釈さ)春contollerの私は次の例外を得た複数の識別子を持つ @JsonViewとメソッドを注釈

@JsonViewに複数のクラスが指定されていても、 が指定されているにもかかわらず、応答本文のアドバイスの使用はでのみサポートされています正確に1つのクラス引数。複合インタフェースの使用を考えてみましょう。同様に

複数の識別子を有する@JsonViewとも(@RequestBodyで注釈)コントローラのメソッド引数に注釈を付けます。 @JsonViewが指定 、リクエストボディのアドバイスだけ 正確に1つのクラスの引数でサポートされているため、使用する複数のクラスを可能にもかかわらず、

なお:JsonViewRequestBodyAdviceJavadocによります。複合インタフェースの使用を考えてみましょう。

修正が予定されているかどうかは誰にも分かりますか?私の現在のSpringバージョンは4.2.4です。

パブリック、プライベート(公開公開)、サマリーおよび詳細(拡張サマリー)ビューのjsonビューを作成し、コントローラメソッドでそれらを組み合わせることは、非常に便利です!

答えて

2

Jackson JsonView documentationで説明されているように、「シリアライズごとにアクティブなビューは1つだけですが、ビューの継承により、集約を介してビューを結合できます。

あなたは両方FooBar JsonViewsを使用したい場合は具体的には、以下のようにそれらを結合FooBarインタフェースを定義します。

interface Foo {} 

interface Bar {} 

interface FooBar extends Foo, Bar {} 

あなたはその後、@JsonView(Foo.class)@JsonView(Bar.class)であなたのフィールドに注釈を付けると、コントローラレベルで@JsonView(FooBar.class)を使用することができます。

+0

Sebastienにあなたのコメントをありがとうございますが、私たちは継承を使うことができます(集約ではありません)。 –

+0

わかりません、あなたのユースケースの詳細を教えてください。 –

関連する問題