2016-04-13 22 views
0

私はコントローラを持っていますが、リクエストが穏やかである場合はResponseEntity<>を返す場合もあり、場合によってはModelAndViewを返さなければならない場合もあります。単一のSpring MVCコントローラからの複数の戻り型

これを行う方法はありますか?私は、戻り値の型が必要かどうかによって例外をスローし、次にExceptionHandlerに必要な型を返すことを考えていました。

例えば、ReturnResponseEntityExceptionを投げた後、ExceptionHandlerでこれをキャッチしResponseEntityを返し、その他の場合にReturnModelAndViewExceptionを投げます。

しかし、ModelAndViewResponseEntityは、元のコントローラでのみ使用可能で例外ハンドラでは使用できない特定の属性を必要とするため、これが機能しないことを認識しました。属性を例外ハンドラに渡す方法はありますか?

また、ControllerからObjectを返すだけで、SpringはObject iのクラスに応じてResponseEntityまたはModelAndViewを処理できますか?

これを達成する別の方法がありますか?

+0

なぜ例外を使用しますか?目的のオブジェクトを返すために単純な 'if-then-else'を使うことができます。 – Sachin

+0

メソッドのシグネチャには単一の戻り値があるためです。その戻り値の型ではないものを返すことはできません – rurounisuikoden

+3

同じエンドポイントで異なることがあるのはなぜですか?それは悪いデザインです。 – dambros

答えて

0

Spring 4.2.xを使用していると仮定すると、MappingJacksonValueをMVCコントローラのRESTエンドポイントメソッドの戻り値の型として使用できます。 MappingJacksonValueはjava.lang.Objectの周りのラッパーオブジェクトであり、文字通りその中に何かをラップすることができます。その内容をJSONに変換するのはSpringによって処理されます。私は返すものを動的にフィルタリングするために使用します。実行時にURLパラメータに基づいて選択され、リクエストごとに異なる場合があります。あなたの応答をラップするのは簡単です:私の意見MappingJacksonValueで

MyResponseObject response = createResponseObject(); 
    final MappingJacksonValue result = new MappingJacksonValue(response); 
    result.setFilters(createFilters(response)); 
    return result; 

は最近行わ春に最大の追加の一つです!

関連する問題