如何在 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如何去获取前端传递的参数

如何在spring boot中获取所有RequestMapping的URL路径列表集

Spring Boot - 如何通过带有查询参数的 url 发送 POST 请求并将响应存储在方法中?

如何确定向远程 Spring Boot 服务器发送请求的 URL?

在 Spring Boot 中获取请求标头

如何在spring boot嵌入式tomcat中获取当前客户端请求线程数?