5

注釈付きコントローラーとコンテンツ ネゴシエーション (@ResponceBody) を使用して REST サービスを作成しています。異なるユース ケースに対応する {{Foo}} のインスタンスを返す 2 つの異なるコントローラー メソッドがあり、{{Foo}} の JSON 表現をこれらのメソッドで異なるものにしたいと考えています。

例えば:

@ResponseBody
public Foo method1() {... return new Foo(123); } // should produce '123'
@ResponseBody
public Foo method2() {... return new Foo(123); } // should produce '{name:"Foo", number:123}'

もちろん、DTO パターンを使用して、さまざまなメソッドでさまざまな DTO を返し (たとえば、それぞれ {{FooDTO1}} と {{FooDTO2}})、それらの DTO にさまざまな JSON シリアライザーを登録するだけです。しかし、適切な JSON シリアライザーを適用するためだけに、2 つの追加の DTO クラスを定義し、それらのクラスの使い捨てインスタンスを作成するのは間違っていると感じるので、より良い方法があるのではないかと思います。どのシリアライザーをどのケースに使用する必要があるか、SpringまたはJacksonに何らかのヒントを与えることはできませんか?

4

2 に答える 2

1

@CodeChimp で提案されているように、異なるリクエスト コンテンツ タイプを使用して、同じリソースの異なる表現を切り替えることができます。これは REST 哲学に対応Springし、コンテンツ タイプに依存してシリアライザーを選択するため、 によって直接サポートされます。したがって、必要なことは、クラスFooごとに異なるコンテンツ タイプにバインドされた 2 つのシリアライザーを登録することだけです。例えばapplication/json-vnd.myCompany.com+type1、表現はそれに応じてによって生成さSerializer1application/json-vnd.myCompany.com+type2ますSerializer2。どの表現を選択するかは、クライアント次第です。

于 2013-08-28T12:38:23.327 に答える
-1
want the JSON representation of the {{Foo}} to be different for those methods

間違いなく、異なるシリアライザーと foos が必要になります。事実から逃れることはできません。そして、その好ましい私見。

于 2013-06-11T09:58:08.100 に答える