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()
HttpServletRequestobjeto. 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
RequestContextHolderdirectamente, también puede usarServletUriComponentsBuildery sus métodos estáticos:ServletUriComponentsBuilder.fromCurrentContextPath()ServletUriComponentsBuilder.fromCurrentServletMapping()ServletUriComponentsBuilder.fromCurrentRequestUri()ServletUriComponentsBuilder.fromCurrentRequest()Se usan
RequestContextHolderbajo el capó, pero brindan flexibilidad adicional para crear nuevas URL utilizando las capacidades deUriComponentsBuilder.Ejemplo:
fuente
ConstraintValidatorarchivoServletUriComponentsBuilder.fromCurrentRequestUri().toUriString();.La clase URI de Java puede ayudarte con esto:
fuente
en el archivo jsp:
fuente
También puede agregar
UriComponentsBuildera 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
UriComponentsBuilderno incluye la ruta ni los parámetros de consulta de la solicitud. Si necesita acceder a ellos, useServletUriComponentsBuilder.fromCurrentRequest()o inyecte una instancia deHttpServletRequesty 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.comfuente