Spring註解:@RequestParam vs @PathVariable

翻譯自Baeldung
都可以從URI中獲取參數,但是略有不同:

  1. @RequestParam是從query string中提取對應參數:
@GetMapping("/foos/{id}")
@ResponseBody
public String getFooById(@PathVariable String id) {
   return "ID: " + id;
}
//對應的url:http://localhost:8080/foos/abc

@PathVariable則是從URI中提取參數:

@GetMapping("/foos")
@ResponseBody
public String getFooByIdUsingQueryParam(@RequestParam String id) {
    return "ID: " + id;
}
//對應的url:http://localhost:8080/foos?id=abc
  1. 因爲提取參數的位置不同,因此,@PathVariable對應的參數是沒有被URL加密的:
http://localhost:8080/foos/ab+c

@PathVariable在解析上述URI時,拿到的實際參數爲ab+c;

http://localhost:8080/foos?id=ab+c

@RequestParam在解析上述URI時,實際拿到的參數爲ab c。
3. @RequestParam支持可選參數,@PathVariable在Spring 4.3.3後也支持可選參數:

@GetMapping({"/myfoos", "/myfoos/{id}"})
@ResponseBody
public String getFooByOptionalId(@PathVariable(required = false) String id){
    return "ID: " + id;
}
//對於如下url,id=abc
http://localhost:8080/myfoos/abc
//對於如下url, id=null
http://localhost:8080/myfoos
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章