¿Cómo recibe un parámetro de URL con un mapeo de controlador de resorte?

98

Este problema parece trivial, pero no puedo hacer que funcione correctamente. Estoy llamando a mi mapeo de controlador Spring con jquery ajax. El valor de someAttr siempre es una cadena vacía independientemente del valor de la URL. Ayúdame a determinar por qué.

-URL llamado

http://localhost:8080/sitename/controllerLevelMapping/1?someAttr=6

-Mapeo de controladores

@RequestMapping(value={"/{someID}"}, method=RequestMethod.GET)
public @ResponseBody int getAttr(@PathVariable(value="someID") final String id, 
        @ModelAttribute(value="someAttr") String someAttr) {
    //I hit some code here but the value for the ModelAttribute 'someAttr' is empty string.  The value for id is correctly set to "1".
}
descifrador
fuente

Respuestas:

159

Deberías usar en @RequestParamlugar de @ModelAttribute, por ejemplo

@RequestMapping("/{someID}")
public @ResponseBody int getAttr(@PathVariable(value="someID") String id, 
                                 @RequestParam String someAttr) {
}

Incluso puede omitir por @RequestParamcompleto si lo desea, y Spring asumirá que eso es lo que es:

@RequestMapping("/{someID}")
public @ResponseBody int getAttr(@PathVariable(value="someID") String id, 
                                 String someAttr) {
}
skaffman
fuente
En el caso de cualquier otra persona también está buscando la documentación oficial @RequestParam, aquí está: docs.spring.io/spring/docs/current/javadoc-api/org/...
Tobias
22

Tiene muchas variantes para usar @RequestParamcon elementos opcionales adicionales, p. Ej.

@RequestParam(required = false, defaultValue = "someValue", value="someAttr") String someAttr

Si no lo pone required = false, se requerirá param de forma predeterminada.

defaultValue = "someValue" - el valor predeterminado para usar como respaldo cuando el parámetro de solicitud no se proporciona o tiene un valor vacío.

Si la solicitud y el parámetro de método son iguales, no es necesario value = "someAttr"

Optio
fuente