Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring Boot RestController中获取请求URL_Java_Spring_Spring Boot - Fatal编程技术网

Java 如何在Spring Boot RestController中获取请求URL

Java 如何在Spring Boot RestController中获取请求URL,java,spring,spring-boot,Java,Spring,Spring Boot,我正在尝试在RestController中获取请求URL。RestController有多个用@RequestMapping注释的方法用于不同的URI,我想知道如何从@RequestMapping注释中获得绝对URL @RestController @RequestMapping(value = "/my/absolute/url/{urlid}/tests" public class Test { @ResponseBody @RequestMapping(value "/",pr

我正在尝试在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;
   }
} 

您可以尝试将类型为
HttpServletRequest
的附加参数添加到
getUrlValue()
方法:

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

允许获取系统上的任何URL,而不仅仅是当前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()

如果您不希望对Spring的HATEOAS或
javax.*
命名空间有任何依赖性,请使用
ServletUriComponentsBuilder
获取当前请求的URI:

import org.springframework.web.util.UriComponentsBuilder;

ServletUriComponentsBuilder.fromCurrentRequest();
ServletUriComponentsBuilder.fromCurrentRequestUri();

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


如果您已经在
路径中设置了URL,那么您已经知道URL的“前缀”。您只需要知道url中的参数,可以使用
@PathVariable

获取该参数,谢谢您的回复和示例。我知道这种方法,但想知道是否有方法可以使用控制器级别的任何属性获取url信息,但似乎这是正确的方法。HttpServletRequest从何处导入?javax.servlet.http.HttpServletRequest我以前从未听说过
MvcUriComponentsBuilder
!它对于RESTful控制器非常有用!这个答案非常有效,但是不需要HATEAOS依赖项就可以了吗?尽管我尝试的所有方法都依赖于请求,但在我的场景中没有这种方法。
@SpringBootApplication
@RestController
public class DataStore {
    public static void main(String[] args) {
        SpringApplication.run(DataStore.class, args);
    }

    @RequestMapping(path = "api/v1/student/{studentId}")
    public int getURLValue(@PathVariable("studentId") int studentId){

        System.out.println("studentId is " + studentId);
        return studentId;
    }
}