如何在 Spring Boot 中获取请求 URL
Posted
技术标签:
【中文标题】如何在 Spring Boot 中获取请求 URL【英文标题】:How to get Request URL in Spring Boot 【发布时间】:2019-03-21 10:20:01 【问题描述】:我需要将请求 URL 作为 String
参数提交给方法
@RequestMapping(value = "/test", method = RequestMethod.POST)
public void testItt(@RequestParam String requestParameter, @RequestURL String requestUrl)
// Do something with requestUrl
如何正确提交请求 URL?
我试过request.getRequestURL().toString()
但我觉得一定有更好的办法。
【问题讨论】:
request.getRequestURL().toString()
听起来不错。
HttpServletRequest to complete URL的可能重复
您可以简单地将Request request
作为参数添加到您的控制器方法中。 Spring 会自动传递请求对象。
反对票是怎么回事?这似乎是合法的,我遇到了这个问题 TON
【参考方案1】:
永远不要只从请求中获取 URL。这太容易了!编程应该是很难的,当它不难的时候,你让它变得很难! :)
但是您可以按照上面显示的方式检索 URL
让我们从一个表示您要检索的值的注释开始
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface RequestURL
这将作为一种注入您已经有权访问的值的方式。
接下来我们需要创建一个可以构建 URL 字符串的类
public class RequestUrlArgumentResolver
implements HandlerMethodArgumentResolver
@Override
public boolean supportsParameter(MethodParameter methodParameter)
return methodParameter.getParameterAnnotation(RequestURL.class) != null;
@Override
public Object resolveArgument(
MethodParameter methodParameter,
ModelAndViewContainer modelAndViewContainer,
NativeWebRequest nativeWebRequest,
WebDataBinderFactory webDataBinderFactory) throws Exception
HttpServletRequest request
= (HttpServletRequest) nativeWebRequest.getNativeRequest();
//Nice and cozy at home surrounded by safety not obfuscation
return request.getRequestURL().toString();
接下来我们需要让框架识别这个注解的处理程序。
将以下方法添加到您的配置中(如果您的配置未实现 WebMvcConfigurer,您可能需要实现此类或创建一个包含新配置的新配置)
...
@Override
public void addArgumentResolvers(
List<HandlerMethodArgumentResolver> argumentResolvers)
argumentResolvers.add(new RequestUrlArgumentResolver());
...
最后我们回到你原来的请求映射,它应该像最初写的那样工作
@RequestMapping(value = "/test", method = RequestMethod.POST)
public void testItt(@RequestParam String requestParameter,
@RequestURL String requestUrl)
// Do something with requestUrl
学分 - https://www.baeldung.com/spring-mvc-custom-data-binder
【讨论】:
哈哈,太棒了! @Selindek 说句公道话,这个回复实际上非常棒。当然,它是过度设计的,但它非常全面且可重复。疯狂的道具:D以上是关于如何在 Spring Boot 中获取请求 URL的主要内容,如果未能解决你的问题,请参考以下文章
如何在spring boot中获取所有RequestMapping的URL路径列表集
Spring Boot - 如何通过带有查询参数的 url 发送 POST 请求并将响应存储在方法中?