web-dev-qa-db-ja.com

Spring MVCコントローラーメソッドの有効な戻り値の型は何ですか?

私はSpring MVCの経験があまりなく、コントローラーメソッドが返すことができる有効な戻り値の型について以下を持っています。

そのため、ユーザーがHttpRequestを生成し、DispatcherServletがこの要求を特定のコントローラークラスにディスパッチすることで処理することを知っています。

コントローラクラスは次のようなものです。

@Controller
public class AccountController {

    @RequestMapping("/showAccount")
    public String show(@RequestParam("entityId") long id, Model model) {
        ...
    }

    .......................................
    .......................................
    .......................................
}

したがって、各メソッドは特定のリクエストを処理し、処理されたリクエストは@ RequestMappingアノテーションで指定されることを知っています。

また、メソッドはString論理ビュー名(ビューをレンダリングするためにview resolverによって解決される)オブジェクトを返すことも知っています。 )

したがって、この段階では、コントローラークラスのメソッドはStringオブジェクトのみを返すと思います。しかし、私はそれを確信していません。たぶん、このようなメソッドはいくつかの異なる種類のオブジェクトを返すことができますか?

22
Java Surfer

次のように、コントローラー内で@RequestMappingで注釈が付けられたHandlerメソッドには、多くの戻り値の型があります。

  • ModelAndView(クラス)

  • モデル(インターフェース)

  • 地図
  • ストリング
  • ボイド
  • 見る
  • HttpEntity<?>またはResponseEntity<?>
  • HttpHeaders

その他..... ドキュメントを参照

たとえば、戻り値の型にはそれぞれ特定の用途があります。Stringを使用している場合、ビュー名を返すことを意味し、このビュー名はViewResolverによって解決されます。ビュー名を返さない場合は、voidとして返されるタイプを指定します。ビュー名を設定し、ビューにデータを送信する場合は、戻り型としてModelAndViewを使用します。

ハンドラーメソッドで渡すことができるメソッド引数の種類についても知ることができるドキュメントをご覧ください。

22
Rajeev

doc に直接回答があります

の特別なメモを取る

メソッドに@ResponseBodyアノテーションが付けられている場合、戻り値のタイプは応答HTTP本文に書き込まれます。戻り値は、HttpMessageConvertersを使用して、宣言されたメソッドの引数型に変換されます。

メソッドに@ ResponseBodyと注釈が付けられている場合、戻り値の型は任意のカスタム型、any Java pojo、thatフレームワークは適切な表現JSON、XMLなどに変換し、応答本文に書き戻します

2
Master Slave

AnnotationMethodHandlerAdapter#getModelAndView をご覧ください。このメソッドには、戻り値の処理方法を選択するために、戻り値のタイプに基づいたいくつかの条件があります。

1
marco.eig