¿Hay alguna forma de obtener el valor completo de la ruta después de requestMapping
@PathVariable
analizar los valores?
Es decir:
/{id}/{restOfTheUrl}
debe ser capaz de analizar /1/dir1/dir2/file.html
en id=1
yrestOfTheUrl=/dir1/dir2/file.html
Cualquier idea sería apreciada.
spring
spring-mvc
request-mapping
Mono de primavera
fuente
fuente
restOfTheUrl
será la ruta completa, no solo la parte restante capturada por**
Acabo de encontrar ese problema correspondiente a mi problema. Usando las constantes de HandlerMapping pude escribir una pequeña utilidad para ese propósito:
fuente
Esto ha estado aquí bastante tiempo pero publicando esto. Puede ser útil para alguien.
fuente
Sobre la base de la excelente respuesta de Fabien Kruba , pensé que sería bueno si la
**
porción de la URL se pudiera dar como un parámetro para el método del controlador a través de una anotación, de manera similar@RequestParam
y en@PathVariable
lugar de usar siempre un método de utilidad que explícitamente requirió elHttpServletRequest
. Así que aquí hay un ejemplo de cómo se podría implementar eso. Esperemos que alguien lo encuentre útil.Cree la anotación, junto con el argumento resolutor:
Registre el método de resolución de argumentos:
Use la anotación en los métodos de su controlador de controlador para tener acceso fácil a la
**
parte de la URL:fuente
Necesita usar incorporado
pathMatcher
:fuente
He usado el Tuckey URLRewriteFilter para manejar elementos de ruta que contienen caracteres '/', ya que no creo que Spring 3 MVC los admita todavía.
http://www.tuckey.org/
Pones este filtro en tu aplicación y proporcionas un archivo de configuración XML. En ese archivo, proporciona reglas de reescritura, que puede usar para traducir elementos de ruta que contienen caracteres '/' en parámetros de solicitud que Spring MVC puede manejar adecuadamente usando @RequestParam.
WEB-INF / web.xml:
WEB-INF / urlrewrite.xml:
Método del controlador:
fuente
Sí,
restOfTheUrl
no está devolviendo solo el valor requerido, pero podemos obtener el valor utilizando laUriTemplate
coincidencia.He resuelto el problema, así que aquí la solución de trabajo para el problema:
fuente
Así es como lo hice. Puede ver cómo convierto la URL solicitada en una ruta del sistema de archivos (de qué se trata esta pregunta SO). Bono: y también cómo responder con el archivo.
fuente
fuente
Tengo un problema similar y resolví de esta manera:
Tenga en cuenta que
req.getPathInfo()
devolverá la ruta completa (con{siteCode}
y{fileName}.{fileExtension}
), por lo que deberá procesarla convenientemente.fuente