1.直接在Controller 方法參數上配置參數名
@RequestMapping("/method01") public String method01(String name, Integer age, Double mon) { User user = new User(); user.setName(name); user.setAge(age); user.setMoney(mon); return JSON.toJSONString(user); }
這種格式接收的是method01?name=zhangsan&age=15&mon=20.0格式的傳參,並且要求參數名與url 地址中攜帶的參數名完全一致;
這種形式傳參與請求方式無關,get post .put 等皆可;
2.@RequestParam 接收url地址中的參數
@RequestMapping(value = "/method02") public String method02(@RequestParam("name") String name, @RequestParam("age") Integer age, @RequestParam(value = "money", required = false) Double mon) { User user = new User(); user.setName(name); user.setAge(age); user.setMoney(mon); return JSON.toJSONString(user); }
這種方式原理上與第一種一致,都是接收請求url地址種的參數,所以與請求方式無關;
這種方式註解種的value值會去映射請求url 中的同名參數取參然後賦值給加註解的形參,所以註解中的參數名必須與url中一致,而方法形參名可以根據自身需求靈活變更;
注意加此註解的required 屬性 默認爲true,也就是接收請求時會根據value去url尋找同名參數,如果沒找到會報錯;
所以如果有某一參數可能不傳的情況,需要將required屬性設爲false
3.@RequestBody 接收body中JSON字符串參數
@RequestMapping(value = "/method03") public String method03(@RequestBody User user) { return JSON.toJSONString(user); }
上面兩種方式都是通過從請求頭(url) 中傳參的方式實現獲取參數,@RequestBody則是接收請求體中的JSON 字符串參數直接映射實體對象,所以body類型必須是JSON字符串;
注意實體類中的屬性名稱必須與JOSN串中的參數key名稱完全一致,不同命參數無法正確接收;
使用此種方式推薦使用Post請求攜帶body參數,get請求雖然也可以攜帶body參數並請求成功但並不推薦這樣操作,
通常get請求通過url攜帶參數可以根據url作爲key緩存資源,常用的靜態資源服務器都是這種原理,如果參數在body中這種方式就失效了
4.直接通過實體接收參數
@RequestMapping(value = "/method04") public String method04(User user) { return JSON.toJSONString(user); }
這種方式要求請求中的參數名與實體中的屬性名一致即可自動映射到實體屬性中;
支持url拼接的多個params 傳參
支持post請求 的form類型傳參(form-data,x-www-form-urlencoded), 不支持JSON 傳參
5.@ModelAttribute 接收實體參數
@RequestMapping("/method05") public String method05(@ModelAttribute("user") User user) { return JSON.toJSONString(user); }
@ModelAttribute 註解主要作用是自動將數據暴露爲模型數據用於視圖頁面展示時使用,比如此處註解value爲user, 前端視圖就可以通過${user.name}來獲取綁定的命令對象的屬性
此用法與方法4完全一致,支持url拼接的多個params 傳參。可以用於接收url 或者from表單中的數據映射實體;
支持post請求 的form類型傳參(form-data,x-www-form-urlencoded), 不支持JSON 傳參
6.HttpServletRequest request接收參數
@RequestMapping("/method06") public String method06(HttpServletRequest request) { User user = new User(); user.setName(request.getParameter("name")); user.setAge(Integer.valueOf(request.getParameter("age"))); user.setMoney(Double.parseDouble(request.getParameter("money"))); return JSON.toJSONString(user); }
傳統的接收參數方式,可以接收url params 傳參,支持post from類型傳參,不支持JSON傳參,注意如果請求中未傳遞指定名稱的參數,取參時會報錯
7.@PathVariable RestFul 風格傳參
@RequestMapping(value = {"/method07/{name}/{age}/{money}","/method07/{name}/{money}"}) public String method07(@PathVariable("name") String name, @PathVariable(value = "age", required = false) Integer age, @PathVariable("money") Double money) { User user = new User(); user.setName(name); user.setMoney(money); user.setAge(age); return JSON.toJSONString(user); }
通過@PathVariable實現restFul 風格傳參,直接將參數拼接到url地址中,支持get,post,put delete 等多種請求required屬性默認爲true ,不傳遞參數會報錯;
如果出現某個參數未傳遞的情況可以通過設置required屬性爲false並設置多個value 字符串的形式實現
user實體類
@Data @ToString public class User { private String name; private Integer age; private Double money; }
轉自 https://blog.csdn.net/qq_31580425/article/details/124941626