Existe uma maneira de obter o valor completo do caminho após a requestMapping
@PathVariable
análise dos valores?
Ou seja:
/{id}/{restOfTheUrl}
deve ser capaz de analisar /1/dir1/dir2/file.html
em id=1
erestOfTheUrl=/dir1/dir2/file.html
Todas as idéias seriam apreciadas.
spring
spring-mvc
request-mapping
Macaco da Primavera
fonte
fonte
restOfTheUrl
será o caminho inteiro, e não apenas a parte restante capturado por**
Acabei de encontrar esse problema correspondente ao meu problema. Usando constantes HandlerMapping, consegui escrever um pequeno utilitário para esse fim:
fonte
Isso já está aqui há um bom tempo, mas postando isso. Pode ser útil para alguém.
fonte
Baseando-se já excelente resposta de Fabien Kruba , eu pensei que seria bom se a
**
parte do URL pode ser dado como um parâmetro para o método de controle através de uma anotação, de forma que era semelhante ao@RequestParam
e@PathVariable
, ao invés de sempre usando um método de utilitário que exigia explicitamente oHttpServletRequest
. Então, aqui está um exemplo de como isso pode ser implementado. Espero que alguém ache útil.Crie a anotação, juntamente com o resolvedor de argumentos:
Registre o resolvedor de argumentos do método:
Use a anotação nos métodos de tratamento do controlador para ter acesso fácil à
**
parte da URL:fonte
Você precisa usar o built-in
pathMatcher
:fonte
Eu usei o Tuckey URLRewriteFilter para manipular elementos de caminho que contêm caracteres '/', pois acho que o Spring 3 MVC ainda não os suporta.
http://www.tuckey.org/
Você coloca esse filtro no seu aplicativo e fornece um arquivo de configuração XML. Nesse arquivo, você fornece regras de reescrita, que podem ser usadas para converter elementos de caminho que contêm caracteres '/' em parâmetros de solicitação com os quais o Spring MVC pode lidar adequadamente usando @RequestParam.
WEB-INF / web.xml:
WEB-INF / urlrewrite.xml:
Método do controlador:
fonte
Sim, o
restOfTheUrl
não está retornando apenas o valor necessário, mas podemos obtê-lo usando aUriTemplate
correspondência.Eu resolvi o problema, então aqui a solução de trabalho para o problema:
fonte
Aqui está como eu fiz isso. Você pode ver como eu converto a URL solicitada em um caminho do sistema de arquivos (sobre o que é essa pergunta do SO). Bônus: e também como responder com o arquivo.
fonte
fonte
Eu tenho um problema semelhante e resolvi desta maneira:
Observe que
req.getPathInfo()
retornará o caminho completo (com{siteCode}
e{fileName}.{fileExtension}
) para que você precise processar convenientemente.fonte