Spring MVC Wie wird der Parameterwert einer GET HTTP-Anforderung in meiner Controller-Methode verwendet?

87

In dieser Zeit studiere ich das Spring MVC-Schaufensterbeispiel (herunterladbar vom STS-Dasboard) und habe einige einfache Fragen zu den Request MappingBeispielen:

1) Auf meiner home.jspSeite habe ich diesen Link:

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

Wie Sie unter diesem Link sehen können, mache ich eine HTTP-GET-Anfrage mit einem "foo" -Parameter, der den Wert "bar" enthält.

Diese HTTP-Anforderung wird von der folgenden Methode der Controller-Klasse MappingController verarbeitet:

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

Diese Methode verwaltet HTTP-Anforderungen (nur GETTyp) mit einem Parameter namens "foo".

Wie kann ich den Wert ("bar") dieses Parameters in eine Variable im Code meiner by Parameter-Methode einfügen?

AndreaNobili
quelle

Antworten:

184

Wie in der Dokumentation erläutert , verwenden Sie eine @RequestParamAnmerkung:

public @ResponseBody String byParameter(@RequestParam("foo") String foo) {
    return "Mapped by path + method + presence of query parameter! (MappingController) - foo = "
           + foo;
}
JB Nizet
quelle
3
Vielen Dank für
Ihre
3
Falls es 10 Parameter gibt, müssen wir dies 10 Mal tun oder es gibt einen besseren Weg für dieses Szenario
Count
2
@Count: Klicken Sie auf den Link, den ich zur Dokumentation gegeben habe, scrollen Sie ein wenig nach oben bis zum Absatz "Unterstützte Methodenargumenttypen" und lesen Sie den Teil über "Befehls- oder Formularobjekte"
JB Nizet
43

Sie können auch eine URI-Vorlage verwenden. Wenn Sie Ihre Anfrage in eine erholsame URL strukturiert haben, kann Spring den angegebenen Wert aus der URL analysieren.

HTML

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

Regler

@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-Vorlagendokumentation

Kevin Bowersox
quelle