web-dev-qa-db-ja.com

Spring MVCどのように私のコントローラメソッドでGET HTTP Requestのパラメータ値を取るのですか?

この期間に私はSpring MVCのショーケースの例(STSのダッシュボードからダウンロード可能)を勉強しています、そして私はRequest Mappingの例についていくつかの簡単な質問をします:

1)home.jspページにこのリンクがあります。

        <li>
            <a id="byParameter" class="textLink" href="<c:url value="/mapping/parameter?foo=bar" />">By path, method, and presence of parameter</a>
        </li>

このリンクからわかるように、値「bar」を含む「foo」パラメータを持つHTTP GETリクエストを実行しています。

このHTTPリクエストは、コントローラクラスMappingControllerの以下のメソッドによって処理されます。

@RequestMapping(value="/mapping/parameter", method=RequestMethod.GET, params="foo")
public @ResponseBody String byParameter() {
    return "Mapped by path + method + presence of query parameter! (MappingController)";
}

このメソッドは、 "foo"という名前のパラメータを持つHTTPリクエスト(GETタイプのみ)を管理します。

どうやってこのパラメータの値( "bar")を取得し、それを自分のby Parameterメソッドのコード内の変数に入れることができますか?

85
AndreaNobili

ドキュメント で説明されているように、@RequestParamアノテーションを使うことで:

public @ResponseBody String byParameter(@RequestParam("foo") String foo) {
    return "Mapped by path + method + presence of query parameter! (MappingController) - foo = "
           + foo;
}
182
JB Nizet

URIテンプレートを使うこともできます。リクエストを安らかなURLに構造化した場合、SpringはURLから提供された値を解析できます。

HTML

<li>
    <a id="byParameter" 
       class="textLink" href="<c:url value="/mapping/parameter/bar />">By path, method,and
           presence of parameter</a>
</li>

コントローラー

@RequestMapping(value="/mapping/parameter/{foo}", method=RequestMethod.GET)
public @ResponseBody String byParameter(@PathVariable String foo) {
    //Perform logic with foo
    return "Mapped by path + method + presence of query parameter! (MappingController)";
}

Spring URI Template Documentation

41
Kevin Bowersox