2011-08-11 8 views
56

Este problema parece trivial, pero no puedo lograr que funcione correctamente. Estoy llamando a mi mapeo de controlador Spring con jquery ajax. El valor de someAttr siempre es cadena vacía independientemente del valor en la url. Por favor, ayúdame a determinar por qué.¿Cómo se recibe un parámetro url con un mapeo de controlador de resorte?

-URL llamados

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

-Controller Mapeo

@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". 
} 

Respuesta

84

Debería utilizar en lugar de @RequestParam@ModelAttribute, por ejemplo,

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

Incluso puede omitir por completo @RequestParam si lo desea, y la primavera va a suponer que es lo que es:

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

Usted tiene una gran cantidad de variantes para el uso de @RequestParam con elementos opcionales adicionales, por ejemplo,

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

Si usted no pone required = false - PARAM se requerirá por defecto.

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

Si la solicitud y el parámetro del método son iguales - no necesita value = "someAttr"

Cuestiones relacionadas