Java 如何在Spring Boot RestController中获取请求URL
我正在尝试在RestController中获取请求URL。RestController有多个用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
@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;
}
}