1.@RequestParam與@PathVariable以及@PathParam的區別
@GetMapping("/data/reqparam/{id}")
// @RequestParam 可以設置參數是否爲必須傳,以及默認值
// URL:xxxx/shop/data/reqparam/1?id=2
public String dataTest(@RequestParam(value="id",defaultValue = "2",required = true) String id) {
return id;
}
@GetMapping("/data/pathparam/{param}")
// 獲取參數同@RequestParam
// URL:xxxx/shop/data/pathparam/1?param=2
public String dateTest3(@PathParam(value="param") String param) {
return param;
}
@GetMapping("/data/pathvar/{name}")
// URL:xxxx/shop/data/pathvar/1
public String dateTest2(@PathVariable(value="name",required = true) String name) {
return name;
}
2.@RequestBody獲取參數
參考文章:https://juejin.im/post/5b5efff0e51d45198469acea
2.1使用@RequestBody的時候,api的接口大多是post方式,這時候處理的headers中content-type,不是默認的application/x-www-form-urlencoded請求方式,而是application/json或者是application/xml等請求方式。
當使用application/x-www-form-urlencoded時:
Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
其實想用這個參數的本意是,想用一個Map<String,Object>接收前臺傳過來的所有數據。
@PostMapping("/date/all")
public String getAllDate(@RequestBody Map<String, Object> map) {
return "success";
}
這裏使用強大的postman來進行測試
對應控制檯在debug模式下的參數爲:
這裏可以看到,用Map接收到了前臺傳給後臺的所有數據,再對我們想要處理的數據進行處理。
2.2當然,我們也可以直接用一個DTO類(面向對象的思想,本人習慣將前後臺進行傳輸的數據封裝成DTO類,方便數據的傳輸,以及減少數據的冗餘)來接收前臺傳給我們的數據。
@RequestMapping(value = "/data/dto/all",method = {RequestMethod.POST,RequestMethod.GET})
public String getDTOAll(ReqDTO reqDTO) {
return "success";
}
這裏以GET/POST方式都能獲取到前臺傳到後臺的參數(注意:如果前臺傳了DTO獨享中不存在的成員,則後臺接收不到該數據)。
GET方式:
POST方式
這裏需要注意,當使用POST方式的時候headers的content-type的請求方式,和@RequestBody的不同,這裏要使用:
application/x-www-from-urlencoded請求方式。
寫的不好,希望能幫助大家,有什麼問題還望大家多多指出。