Bem, existem dois métodos para acessar esses dados mais facilmente, mas a interface não oferece a possibilidade de obter a URL inteira com uma chamada. Você deve construí-lo manualmente:
public static String makeUrl(HttpServletRequest request)
{
return request.getRequestURL().toString() + "?" + request.getQueryString();
}
Não sei como fazer isso com as instalações do Spring MVC.
Se você deseja acessar a solicitação atual sem passá-la em todos os lugares, você terá que adicionar um ouvinte no web.xml:
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
Em seguida, use isso para vincular a solicitação ao Thread atual:
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest()
HttpServletRequest
objeto. Isso ocorre porque estou usando várias classes / métodos auxiliares e não quero passar o objeto de solicitação todas as vezes.UrlUtils
. Funciona como um encanto.Em vez de usar
RequestContextHolder
diretamente, você também pode usarServletUriComponentsBuilder
e seus métodos estáticos:ServletUriComponentsBuilder.fromCurrentContextPath()
ServletUriComponentsBuilder.fromCurrentServletMapping()
ServletUriComponentsBuilder.fromCurrentRequestUri()
ServletUriComponentsBuilder.fromCurrentRequest()
Eles usam
RequestContextHolder
nos bastidores, mas fornecem flexibilidade adicional para construir novos URLs usando os recursos doUriComponentsBuilder
.Exemplo:
fonte
ConstraintValidator
comServletUriComponentsBuilder.fromCurrentRequestUri().toUriString();
.A classe URI do Java pode ajudá-lo nisso:
fonte
no arquivo jsp:
fonte
Você também pode adicionar um
UriComponentsBuilder
à assinatura do método do seu método de controlador. O Spring injetará uma instância do construtor criado a partir da solicitação atual.Usando o construtor, você pode começar a criar URIs diretamente com base na solicitação atual, por exemplo, modificar segmentos de caminho.
Veja também UriComponentsBuilderMethodArgumentResolver
fonte
UriComponentsBuilder
não inclui o caminho e os parâmetros de consulta da solicitação. Se você precisar acessá-los, useServletUriComponentsBuilder.fromCurrentRequest()
ou injete uma instância deHttpServletRequest
e useServletUriComponentsBuilder.fromRequest(request)
Se você precisar da URL até o nome do host e não o caminho, use a biblioteca comum do Apache
StringUtil
, e da URL extraia a substring até o terceiro indexOf/
.Exemplo: se fullURL for
https://example.com/path/after/url/
, a saída seráhttps://example.com
fonte