URL de muestra:
../search/?attr1=value1&attr2=value2&attr4=value4
No sé los nombres de attr1, att2 y attr4.
Me gustaría poder hacer algo así (o similar, no me importa, siempre y cuando tenga acceso al Mapa de nombre de parámetro de solicitud -> valor:
@RequestMapping(value = "/search/{parameters}", method = RequestMethod.GET)
public void search(HttpServletRequest request,
@PathVariable Map<String,String> allRequestParams, ModelMap model)
throws Exception {//TODO: implement}
¿Cómo puedo lograr esto con Spring MVC?
java
spring
spring-mvc
MDb
fuente
fuente
@RequestParam MultiValueMap<String, String>
import org.springframework.ui.ModelMap;
también.ModelMap
no es necesario para obtener todos los parámetros de solicitud como mapa; eso es simplemente un detalle específico del código de OP.Editar
Se ha señalado que existe ( al menos a partir de 3.0 ) un mecanismo Spring MVC puro por el cual se podrían obtener estos datos. No lo detallaré aquí, ya que es la respuesta de otro usuario. Vea la respuesta de @ AdamGent para más detalles, y no se olvide de votarla.
En la documentación de Spring 3.2, este mecanismo se menciona tanto en la
RequestMapping
página JavaDoc como en laRequestParam
página JavaDoc, pero anteriormente, solo se menciona en laRequestMapping
página. En la documentación 2.5 no se menciona este mecanismo.Este es probablemente el enfoque preferido para la mayoría de los desarrolladores, ya que elimina (al menos esto) el enlace al
HttpServletRequest
objeto definido por el servlet-api jar./Editar
Debe tener acceso a la cadena de consulta de solicitudes a través de
request.getQueryString()
.Además de getQueryString, los parámetros de consulta también se pueden recuperar de request.getParameterMap () como un mapa.
fuente
@RequestParam
con gusto tomaré unMap
como parámetro (ver mi respuesta).@RequestParam
en unMap<String,String>
para recuperar todos los parámetros de cadena de consulta. Y por favor, no se sienten tan aborrecidos sobre las respuestas que usted ve aquí ... no son que los malos :) static.springsource.org/spring/docs/3.1.x/javadoc-api/org/...@RequestParam Map<>
no se hiciera el camino. Tengo una ligera molestia en que muchos proyectos modernos que he visto Spring MVC (spring 3.1 y superior) pondrán HttpServletRequest y HttpServletResponse en cada método. Y parece que es porque los desarrolladores junior usan StackOverflow y google en lugar de mirar el documento. Esto dificulta que el proyecto Spring cambie de la API de servlet para decir una API Netty. JAX-RS tiene problemas similares de abuso, pero en un grado mucho menor.El objeto HttpServletRequest ya proporciona un mapa de parámetros. Ver request.getParameterMap () para más detalles.
fuente
simplemente puedes usar esto:
Eso debería funcionar bien
fuente
Aquí está el ejemplo simple de obtener parámetros de solicitud en un Mapa.
En este caso, vinculará el valor de studentName y studentEmail con las variables de nombre y correo electrónico respectivamente.
fuente
Úselo
org.springframework.web.context.request.WebRequest
como parámetro en su método de controlador, proporciona el métodogetParameterMap()
, la ventaja es que no ajusta su aplicación a la API de Servlet, WebRequest es un ejemplo de objeto de contexto de patrón JavaEE.fuente
Hay dos interfaces
org.springframework.web.context.request.WebRequest
org.springframework.web.context.request.NativeWebRequest
Permite el acceso genérico a parámetros de solicitud, así como el
request/session
acceso a atributos, sin vínculos con la API nativa de Servlet / Portlet .Ex.:
PD: hay documentos sobre argumentos que se pueden usar como parámetros del controlador.
fuente
String[]
el valor? Tengo que indexarlo a 0 solo para obtener el valor.key=val1,val2
okey=val1&key=val2
(si recuerdo correctamente el soporte de resorte de ambas notaciones) para que obtenga una matriz con 2 elementosPuede que llegue tarde a la fiesta, pero según tengo entendido, estás buscando algo como esto:
fuente
Todos los parámetros serán almacenados en
jsonObject
.fuente
Hay una diferencia fundamental entre los parámetros de consulta y los parámetros de ruta. Es así:
www.your_domain?queryparam1=1&queryparam2=2
- parámetros de consulta.www.your_domain/path_param1/entity/path_param2
- parámetros de ruta.Lo que me sorprendió es que en el mundo de Spring MVC muchas personas confunden una con la otra. Si bien los parámetros de consulta son más como criterios para una búsqueda, los parámetros de ruta probablemente identificarán un recurso de manera única. Dicho esto, no significa que no pueda tener múltiples parámetros de ruta en su URI, porque la estructura de recursos puede estar anidada. Por ejemplo, supongamos que necesita un recurso de automóvil específico de una persona específica:
www.my_site/customer/15/car/2
- Buscando un segundo automóvil de un 15º cliente.¿Cuál sería un caso de uso para poner todos los parámetros de ruta en un mapa? Los parámetros de ruta no tienen una "clave" cuando miras un URI en sí, esas claves dentro del mapa se tomarán de tu anotación @Mapping, por ejemplo:
Desde la perspectiva HTTP / REST, los parámetros de ruta no pueden proyectarse realmente en un mapa. En mi opinión, se trata de la flexibilidad de Spring y su deseo de acomodar cualquier capricho de los desarrolladores.
Nunca usaría un mapa para parámetros de ruta, pero puede ser bastante útil para parámetros de consulta.
fuente