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

时间:2016-06-08 18:47:54

标签: 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 "/",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;
   }
} 

6 个答案:

答案 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

获取的 url 中的参数

答案 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;
    }

}