Como você recebe um parâmetro de url com um mapeamento de controlador de mola

96

Esse problema parece trivial, mas não consigo fazer com que funcione corretamente. Estou chamando meu mapeamento de controlador Spring com jquery ajax. O valor de someAttr é sempre uma string vazia, independentemente do valor no url. Por favor me ajude a determinar o porquê.

-URL chamado

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

- Mapeamento de controlador

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

Respostas:

157

Você deve usar em @RequestParamvez de @ModelAttribute, por exemplo

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

Você pode até omitir por @RequestParamcompleto se quiser, e o Spring irá assumir que é isso:

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

Você tem muitas variantes para usar @RequestParamcom elementos opcionais adicionais, por exemplo

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

Se você não colocar required = false- param será exigido por padrão.

defaultValue = "someValue" - o valor padrão a ser usado como fallback quando o parâmetro de solicitação não for fornecido ou tiver um valor vazio.

Se os parâmetros de solicitação e método forem iguais - você não precisa value = "someAttr"

Optio
fonte