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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章