Spring MVC Como obter o valor do parâmetro de uma solicitação GET HTTP em meu método de controlador?

87

Neste período, estou estudando o exemplo de showcase Spring MVC (para download no painel STS) e tenho algumas perguntas simples sobre os Request Mappingexemplos:

1) Na minha home.jsppágina tenho este link:

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

Como você pode ver neste link, estou fazendo uma solicitação HTTP GET com um parâmetro "foo" contendo o valor: "bar".

Esta solicitação HTTP é tratada pelo seguinte método da classe controladora 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 gerencia a solicitação HTTP (apenas GETtipo) que tem um parâmetro chamado "foo"

Como posso pegar o valor ("bar") deste parâmetro e colocá-lo em uma variável dentro do código do meu método por Parameter?

AndreaNobili
fonte

Respostas:

184

Conforme explicado na documentação , usando uma @RequestParamanotação:

public @ResponseBody String byParameter(@RequestParam("foo") String foo) {
    return "Mapped by path + method + presence of query parameter! (MappingController) - foo = "
           + foo;
}
JB Nizet
fonte
3
Muito obrigado pela sua resposta clara e pela referência à documentação
AndreaNobili 18/11/12
3
Caso haja 10 parâmetros, temos que fazer isso 10 vezes ou existe uma maneira melhor para esse cenário
Contar
2
@Count: clique no link que dei para a documentação, role para cima um pouco até o parágrafo "Tipos de argumentos de método suportados" e leia a parte sobre "Objetos de comando ou formulário"
JB Nizet
43

Você também pode usar um modelo de URI. Se você estruturou sua solicitação em uma URL repousante, Spring poderia analisar o valor fornecido a partir da 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)";
}

Documentação de modelo de URI Spring

Kevin Bowersox
fonte