Что ж, есть два метода для более простого доступа к этим данным, но интерфейс не предлагает возможности получить весь URL-адрес за один вызов. Придется собрать вручную:
public static String makeUrl(HttpServletRequest request)
{
return request.getRequestURL().toString() + "?" + request.getQueryString();
}
Я не знаю, как это сделать с помощью каких-либо средств Spring MVC.
Если вы хотите получить доступ к текущему запросу, не передавая его повсюду, вам нужно будет добавить слушателя в web.xml:
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
А затем используйте это, чтобы привязать запрос к текущему потоку:
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest()
HttpServletRequest
объект. Это потому, что я использую несколько вспомогательных классов / методов и не хочу каждый раз передавать объект запроса.UrlUtils
. Работает как шарм.Вместо
RequestContextHolder
прямого использования вы также можете использоватьServletUriComponentsBuilder
и его статические методы:ServletUriComponentsBuilder.fromCurrentContextPath()
ServletUriComponentsBuilder.fromCurrentServletMapping()
ServletUriComponentsBuilder.fromCurrentRequestUri()
ServletUriComponentsBuilder.fromCurrentRequest()
Они используют
RequestContextHolder
внутренние ресурсы, но обеспечивают дополнительную гибкость для создания новых URL-адресов с использованием возможностейUriComponentsBuilder
.Пример:
источник
ConstraintValidator
withServletUriComponentsBuilder.fromCurrentRequestUri().toUriString();
.В этом вам может помочь класс URI Java:
источник
в файле jsp:
источник
Вы также можете добавить
UriComponentsBuilder
к сигнатуре метода вашего метода контроллера. Spring внедрит экземпляр построителя, созданного из текущего запроса.Используя конструктор, вы можете напрямую начать создание URI на основе текущего запроса, например, изменить сегменты пути.
См. Также UriComponentsBuilderMethodArgumentResolver
источник
UriComponentsBuilder
не включает путь и параметры запроса запроса. Если вам нужно получить доступ к ним, используйтеServletUriComponentsBuilder.fromCurrentRequest()
или внедрите экземплярHttpServletRequest
и используйтеServletUriComponentsBuilder.fromRequest(request)
Если вам нужен URL-адрес до имени хоста, а не путь, используйте Apache Common Lib
StringUtil
, а из URL-адреса извлеките подстроку до третьего indexOf/
.Пример: если fullURL равен,
https://example.com/path/after/url/
то вывод будетhttps://example.com
источник