URL de exemplo:
../search/?attr1=value1&attr2=value2&attr4=value4
Eu não sei os nomes de attr1, att2 e attr4.
Eu gostaria de poder fazer algo assim (ou similar, não me importo, desde que eu tenha acesso ao Mapa do pedido param name -> value:
@RequestMapping(value = "/search/{parameters}", method = RequestMethod.GET)
public void search(HttpServletRequest request,
@PathVariable Map<String,String> allRequestParams, ModelMap model)
throws Exception {//TODO: implement}
Como posso conseguir isso com o Spring MVC?
java
spring
spring-mvc
MDb
fonte
fonte
@RequestParam MultiValueMap<String, String>
import org.springframework.ui.ModelMap;
também.ModelMap
não é necessário para obter todos os parâmetros de solicitação como mapa; isso é simplesmente um detalhe específico ao código do OP.Editar
Foi apontado que existe ( pelo menos a partir do 3.0 ) um mecanismo Spring MVC puro pelo qual se pode obter esses dados. Não vou detalhar aqui, pois é a resposta de outro usuário. Veja a resposta de @ AdamGent para obter detalhes, e não esqueça de votar.
Na documentação do Spring 3.2, esse mecanismo é mencionado na
RequestMapping
página JavaDoc e naRequestParam
página JavaDoc, mas antes, é mencionado apenas naRequestMapping
página. Na documentação 2.5, não há menção desse mecanismo.Essa é provavelmente a abordagem preferida para a maioria dos desenvolvedores, pois remove (pelo menos isso) a ligação ao
HttpServletRequest
objeto definido pelo servlet-api jar./Editar
Você deve ter acesso à string de consulta de solicitações via
request.getQueryString()
.Além de getQueryString, os parâmetros de consulta também podem ser recuperados de request.getParameterMap () como um mapa.
fonte
@RequestParam
terá o prazer de ter umMap
como parâmetro (veja a minha resposta).@RequestParam
em umMap<String,String>
para recuperar todos os parâmetros da cadeia de caracteres de consulta. E por favor, não me sinto tão abominado sobre as respostas que você vê aqui ... eles não são que os maus :) static.springsource.org/spring/docs/3.1.x/javadoc-api/org/...@RequestParam Map<>
caminho não ter sido feito. Eu tenho um pouco de aborrecimento pelo fato de muitos projetos modernos que eu já vi o Spring MVC (primavera 3.1 e superior) e eles colocarão o HttpServletRequest e o HttpServletResponse em todos os métodos. E parece que é porque os desenvolvedores juniores usam o StackOverflow e o google em vez de examinar o documento. Isso torna difícil para o projeto Spring alternar da API do servlet para dizer uma API Netty. O JAX-RS tem problemas semelhantes de abuso, mas em um grau muito menor.O objeto HttpServletRequest já fornece um mapa de parâmetros. Veja request.getParameterMap () para mais detalhes.
fonte
você pode simplesmente usar isso:
Isso deve funcionar bem
fonte
Aqui está um exemplo simples de obter parâmetros de solicitação em um mapa.
Nesse caso, ele vinculará o valor de studentName e studentEmail às variáveis de nome e email, respectivamente.
fonte
Use
org.springframework.web.context.request.WebRequest
como parâmetro no método do controlador, ele fornece o métodogetParameterMap()
, a vantagem é que você não restringe seu aplicativo à API do Servlet, o WebRequest é um exemplo do Objeto de Contexto do padrão JavaEE.fonte
Existem duas interfaces
org.springframework.web.context.request.WebRequest
org.springframework.web.context.request.NativeWebRequest
Permite o acesso genérico a parâmetros de solicitação e acesso a
request/session
atributos, sem vínculos com a API nativa de Servlet / Portlet .Ex.:
PS Existem documentos sobre argumentos que podem ser usados como parâmetros de controlador.
fonte
String[]
valor? Eu tenho que indexá-lo para 0 apenas para obter o valor.key=val1,val2
oukey=val1&key=val2
(se bem me lembro suporte ambas as notações de primavera), assim você terá array com 2 elementosTalvez eu esteja atrasado para a festa, mas de acordo com meu entendimento, você está procurando algo parecido com isto:
fonte
Todos os parâmetros serão armazenados
jsonObject
.fonte
Há uma diferença fundamental entre os parâmetros de consulta e os parâmetros de caminho. É assim:
www.your_domain?queryparam1=1&queryparam2=2
- parâmetros de consulta.www.your_domain/path_param1/entity/path_param2
- parâmetros de caminho.O que eu achei surpreendente é que, no mundo do Spring MVC, muitas pessoas confundem uma pela outra. Embora os parâmetros de consulta sejam mais parecidos com os critérios de uma pesquisa, os parâmetros de caminho provavelmente identificarão um recurso de forma exclusiva. Dito isto, isso não significa que você não pode ter vários parâmetros de caminho em seu URI, porque a estrutura de recursos pode ser aninhada. Por exemplo, digamos que você precise de um recurso de carro específico de uma pessoa específica:
www.my_site/customer/15/car/2
- à procura de um segundo carro de um 15º cliente.O que seria um caso de usuário para colocar todos os parâmetros de caminho em um mapa? Os parâmetros do caminho não têm uma "chave" quando você olha para um URI, essas chaves dentro do mapa seriam retiradas da anotação do @Mapping, por exemplo:
Do ponto de vista HTTP / REST, os parâmetros do caminho não podem ser projetados realmente em um mapa. É tudo sobre a flexibilidade do Spring e seu desejo de acomodar qualquer capricho de desenvolvedores, na minha opinião.
Eu nunca usaria um mapa para parâmetros de caminho, mas pode ser bastante útil para parâmetros de consulta.
fonte