Bueno, hay dos métodos para acceder a estos datos más fácilmente, pero la interfaz no ofrece la posibilidad de obtener la URL completa con una sola llamada. Tienes que construirlo manualmente:
public static String makeUrl(HttpServletRequest request)
{
return request.getRequestURL().toString() + "?" + request.getQueryString();
}
No conozco una forma de hacer esto con ninguna instalación de Spring MVC.
Si desea acceder a la Solicitud actual sin pasarla a todas partes, tendrá que agregar un oyente en web.xml:
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
Y luego use esto para obtener la solicitud vinculada al hilo actual:
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest()
HttpServletRequest
objeto. Esto se debe a que estoy usando varias clases / métodos auxiliares y no quiero pasar el objeto de solicitud cada vez.UrlUtils
. Funciona de maravilla.En lugar de usarlo
RequestContextHolder
directamente, también puede usarServletUriComponentsBuilder
y sus métodos estáticos:ServletUriComponentsBuilder.fromCurrentContextPath()
ServletUriComponentsBuilder.fromCurrentServletMapping()
ServletUriComponentsBuilder.fromCurrentRequestUri()
ServletUriComponentsBuilder.fromCurrentRequest()
Se usan
RequestContextHolder
bajo el capó, pero brindan flexibilidad adicional para crear nuevas URL utilizando las capacidades deUriComponentsBuilder
.Ejemplo:
fuente
ConstraintValidator
archivoServletUriComponentsBuilder.fromCurrentRequestUri().toUriString();
.La clase URI de Java puede ayudarte con esto:
fuente
en el archivo jsp:
fuente
También puede agregar
UriComponentsBuilder
a la firma del método de su método de controlador. Spring inyectará una instancia del constructor creado a partir de la solicitud actual.Con el constructor, puede comenzar a crear URI directamente en función de la solicitud actual, por ejemplo, modificar segmentos de ruta.
Consulte también UriComponentsBuilderMethodArgumentResolver
fuente
UriComponentsBuilder
no incluye la ruta ni los parámetros de consulta de la solicitud. Si necesita acceder a ellos, useServletUriComponentsBuilder.fromCurrentRequest()
o inyecte una instancia deHttpServletRequest
y useServletUriComponentsBuilder.fromRequest(request)
Si necesita la URL hasta el nombre de host y no la ruta, use la biblioteca común de Apache
StringUtil
, y desde la URL extraiga la subcadena hasta el tercer índice de/
.Ejemplo: si fullURL es
https://example.com/path/after/url/
, la salida seráhttps://example.com
fuente