SpringMVCのコントローラの戻り値

求人
SpringMVCのコントローラの戻り値

ContorollerからView(jspとかhtmlとか)へ戻り値を戻していますが、これが何を表しているかというとファイル名になります。(String型の場合)

表示されるのは、WEB-INF\views\home.jspが表示されます。

このhome.jspのhomeとマッピングされています。戻り値に拡張子がないですね。ということで追加してみます。(上記ソースを”home.jsp”と変更するだけ)

これでアクセスしてみます。

SpringMVCのコントローラの戻り値

404エラーとなり、見てのとおりhome.jsp.jspにアクセスしようとしています。

どこでこの拡張子が付加されているかと言うと、web.xml内の以下部分を見ます。

<param-value>タグで指定されているファイルでViewの指定がされますので、そのファイルを開きます。

Google翻訳では以下のように翻訳されました。

/ WEB-INF / viewsディレクトリの@Controllersによる.jspリソースへのレンダリングのために選択されたビューを解決します。

絶対にViewはjspファイルなら問題ないですがその他拡張子のファイルも有りえるなら、この1行はコメントアウトしたほうがよいです。

戻り値はString型でも色々ある

String型の戻り値にforwardredirectといったキーワードをつけることによって違う動きをさせることができます。

redirectする

以下のように記述することによりメソッドをチェーンすることが可能です。

画面表示内容からhome1メソッドにリダイレクトされているのが確認できます。

SpringMVCのコントローラの戻り値

forwardする

redirectとよく似ていますが今度はhomeメソッドからhome1メソッドにforwardしてみます。

これもhome1メソッドにforwardされていることが確認できます。

SpringMVCのコントローラの戻り値

上記だけだと、redirectとforwardの違いがわかりませんが、よくみるとクエリ文字列が違います。

以下のような違いがあります。

キーワード URLの違い
redirect 遷移先のパス+クエリ文字列が渡される
forward URLに変更がない

@ResponseBodyをつける

@RequestMappingと同時に@ResponseBodyも付加するとレスポンスをボディに返すことができます。JSONなどを返したいときはこのアノテーションが使えますね。

以下、実行例です。

SpringMVCのコントローラの戻り値

画面に直接文字列が帰ってきているのが確認できます。

String型ではなく、ModelAndViewクラスをリターンする

このModelAndViewクラスがよく使われるかなと思います。クラス名のとおり、ModelとViewを管理するクラスです。

まず、戻り値がString型からModelAndView型に変わります。

addObjectメソッドでModelからの戻り値を設定することになると思います。ここでは簡単にString型にしています。

setViewNameメソッドで、今までreturnしていたview名(jsp)をセットします。

以下、実行例です。

SpringMVCのコントローラの戻り値

ModelAndViewのインスタンス生成時にView名を指定する

実は、ModelAndViewクラスはコンストラクタでView名を指定することができます。

なので、setViewName()メソッドは分岐がなければ使うことはないはずです。

関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
Python3.6,Djangoを勉強中です,Javaは少し飽きてしまってます–;
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくば、我に七難八苦を与えたまえ」です^^

スポンサーリンク
  • このエントリーをはてなブックマークに追加
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA