【问题标题】:How to get request URL in Spring Boot RestController如何在 Spring Boot RestController 中获取请求 URL
【发布时间】:2016-06-08 18:47:53
【问题描述】:

我正在尝试在 RestController 中获取请求 URL。 RestController 有多个用 @RequestMapping 注释的方法,用于不同的 URI,我想知道如何从 @RequestMapping 注释中获取绝对 URL。

@RestController
@RequestMapping(value = "/my/absolute/url/{urlid}/tests"
public class Test {
   @ResponseBody
   @RequestMapping(value "/",produces = "application/json")
   public String getURLValue(){
      //get URL value here which should be in this case, for instance if urlid      
       //is 1 in request then  "/my/absolute/url/1/tests"
      String test = getURL ?
      return test;
   }
} 

【问题讨论】:

    标签: java spring spring-boot


    【解决方案1】:

    您可以尝试在getUrlValue() 方法中添加一个HttpServletRequest 类型的附加参数:

    @RequestMapping(value ="/",produces = "application/json")
    public String getURLValue(HttpServletRequest request){
        String test = request.getRequestURI();
        return test;
    }
    

    【讨论】:

    • 感谢您的回复和示例。我知道这种方法,但想知道是否有办法使用控制器级别的任何属性获取 url 信息,但似乎这是正确的方法。
    • HttpServletRequest 是从哪里导入的?
    • javax.servlet.http.HttpServletRequest
    • 这里不包含参数
    【解决方案2】:

    如果您不想依赖 Spring 的 HATEOAS 或 javax.* 命名空间,请使用 ServletUriComponentsBuilder 获取当前请求的 URI:

    import org.springframework.web.util.UriComponentsBuilder;
    
    ServletUriComponentsBuilder.fromCurrentRequest();
    ServletUriComponentsBuilder.fromCurrentRequestUri();
    

    【讨论】:

      【解决方案3】:

      允许获取系统上的任何 URL,而不仅仅是当前的。

      import org.springframework.hateoas.mvc.ControllerLinkBuilder
      ...
      ControllerLinkBuilder linkBuilder = ControllerLinkBuilder.linkTo(methodOn(YourController.class).getSomeEntityMethod(parameterId, parameterTwoId))
      
      URI methodUri = linkBuilder.Uri()
      String methodUrl = methodUri.getPath()
      

      【讨论】:

      • 这个答案完美无缺,但是否可以在没有 HATEAOS 依赖的情况下做到这一点?尽管我尝试的所有方法都取决于请求,一种或另一种方式,但我的场景中没有。
      • 这个去哪儿了?怎么样?
      【解决方案4】:

      UriComponentsBuilder 类型的参数添加到您的控制器方法中。 Spring 将为您提供一个预先配置了当前请求的 URI 的实例,然后您可以自定义它(例如通过使用 MvcUriComponentsBuilder.relativeTo 指向使用相同前缀的不同控制器)。

      【讨论】:

      • 我以前从未听说过MvcUriComponentsBuilder!它对 RESTful 控制器非常有用!
      猜你喜欢
      • 2019-03-21
      • 2017-08-07
      • 1970-01-01
      • 2015-11-06
      • 2023-01-13
      • 2018-09-24
      • 2016-06-27
      • 2020-05-23
      • 2017-12-25
      相关资源
      最近更新 更多