Spring MVC ¿Cómo tomar el valor del parámetro de una solicitud GET HTTP en mi método de controlador?

87

En este período, estoy estudiando el ejemplo de presentación de Spring MVC (descargable de STS dasboard) y tengo una pregunta simple sobre los Request Mappingejemplos:

1) En mi home.jsppágina tengo este enlace:

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

Como puede ver en este enlace, estoy haciendo una solicitud HTTP GET que tiene un parámetro "foo" que contiene el valor: "bar".

Esta solicitud HTTP se maneja mediante el siguiente método de la clase de controlador MappingController:

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

Este método administra solicitudes HTTP (único GETtipo) que tienen un parámetro llamado "foo"

¿Cómo puedo tomar el valor ("barra") de este parámetro y ponerlo en una variable dentro del código de mi método by Parameter?

AndreaNobili
fuente

Respuestas:

184

Como se explica en la documentación , usando una @RequestParamanotación:

public @ResponseBody String byParameter(@RequestParam("foo") String foo) {
    return "Mapped by path + method + presence of query parameter! (MappingController) - foo = "
           + foo;
}
JB Nizet
fuente
3
Muchas gracias por su respuesta clara y por la referencia a la documentación
AndreaNobili
3
En caso de que haya 10 parámetros, ¿tenemos que hacer esto 10 veces o hay una mejor manera para ese escenario
Cuente
2
@Count: haga clic en el enlace que le di a la documentación, luego desplácese un poco hacia arriba hasta el párrafo "Tipos de argumentos de método admitidos", y lea la parte sobre "Objetos de comando o formulario"
JB Nizet
43

También puede utilizar una plantilla de URI. Si estructuró su solicitud en una URL tranquila, Spring podría analizar el valor proporcionado de la URL.

HTML

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

Controlador

@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)";
}

Documentación de la plantilla Spring URI

Kevin Bowersox
fuente