簡體   English   中英

如何在 Spring Boot RestController 中獲取請求 URL

[英]How to get request URL in Spring Boot RestController

我正在嘗試在 RestController 中獲取請求 URL。 對於不同的 URI,RestController 有多個用@RequestMapping注釋的方法,我想知道如何從@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;
   }
} 

您可以嘗試向getUrlValue()方法添加類型為HttpServletRequest的附加參數:

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

如果您不想依賴 Spring 的 HATEOAS 或javax.*命名空間,請使用ServletUriComponentsBuilder獲取當前請求的 URI:

import org.springframework.web.util.UriComponentsBuilder;

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

允許獲取系統上的任何 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()

將類型為UriComponentsBuilder的參數添加到您的控制器方法中。 Spring 將為您提供一個使用當前請求的 URI 預配置的實例,然后您可以對其進行自定義(例如通過使用MvcUriComponentsBuilder.relativeTo指向使用相同前綴的不同控制器)。

@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設置了 URL,那么您已經知道您的 url 的“前綴”。 您只需要知道可以使用@PathVariable獲取的 url 中的參數

@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;
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM