我正在尝试在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;
}
}
答案 0 :(得分:31)
您可以尝试在HttpServletRequest
方法中添加getUrlValue()
类型的附加参数:
@RequestMapping(value ="/",produces = "application/json")
public String getURLValue(HttpServletRequest request){
String test = request.getRequestURI();
return test;
}
答案 1 :(得分:9)
如果您不想依赖Spring的HATEOAS或javax.*
命名空间,请使用ServletUriComponentsBuilder
获取当前请求的URI:
import org.springframework.web.util.UriComponentsBuilder;
ServletUriComponentsBuilder.fromCurrentRequest();
ServletUriComponentsBuilder.fromCurrentRequestUri();
答案 2 :(得分:5)
允许获取系统上的任何网址,而不仅仅是当前网址。
import org.springframework.hateoas.mvc.ControllerLinkBuilder
...
ControllerLinkBuilder linkBuilder = ControllerLinkBuilder.linkTo(methodOn(YourController.class).getSomeEntityMethod(parameterId, parameterTwoId))
URI methodUri = linkBuilder.Uri()
String methodUrl = methodUri.getPath()
答案 3 :(得分:0)
将类型UriComponentsBuilder
的参数添加到您的控制器方法中。 Spring将为您提供一个为当前请求预先配置了URI的实例,然后您可以对其进行自定义(例如,使用MvcUriComponentsBuilder.relativeTo
指向使用相同前缀的其他控制器)。
答案 4 :(得分:-2)
@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;
}
}
如果您已经在 path
中设置了网址,那么您已经知道网址的“前缀”。您只需要知道可以使用 @PathVariable
答案 5 :(得分:-11)
@RestController
@RequestMapping(value = "/my/absolute/url/{urlid}/tests")
public class AndroidAppController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String getURLValue(@PathVariable("urlid") String urlid) {
String getURL = urlid;
return getURL;
}
}