api中@RequestBody,@RequestParam,@PathParam,@PathVariable獲取參數

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請求方式。

寫的不好,希望能幫助大家,有什麼問題還望大家多多指出。

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