Java 后端接收Request請求參數(shù)的多種方式匯總
后端接收Request請求參數(shù)的7種方式
1.直接在Controller 方法參數(shù)上配置參數(shù)名
@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格式的傳參,并且要求參數(shù)名與url 地址中攜帶的參數(shù)名完全一致;
這種形式傳參與請求方式無關(guān),get post .put 等皆可;
2.@RequestParam 接收url地址中的參數(shù)
@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地址種的參數(shù),所以與請求方式無關(guān);
這種方式注解種的value值會去映射請求url 中的同名參數(shù)取參然后賦值給加注解的形參,所以注解中的參數(shù)名必須與url中一致,而方法形參名可以根據(jù)自身需求靈活變更;
注意加此注解的required 屬性 默認(rèn)為true,也就是接收請求時會根據(jù)value去url尋找同名參數(shù),如果沒找到會報錯;
所以如果有某一參數(shù)可能不傳的情況,需要將required屬性設(shè)為false
3.@RequestBody 接收body中JSON字符串參數(shù)
@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) 中傳參的方式實現(xiàn)獲取參數(shù),@RequestBody則是接收請求體中的JSON 字符串參數(shù)直接映射實體對象,所以body類型必須是JSON字符串;
注意實體類中的屬性名稱必須與JOSN串中的參數(shù)key名稱完全一致,不同命參數(shù)無法正確接收;
使用此種方式推薦使用Post請求攜帶body參數(shù),get請求雖然也可以攜帶body參數(shù)并請求成功但并不推薦這樣操作,
通常get請求通過url攜帶參數(shù)可以根據(jù)url作為key緩存資源,常用的靜態(tài)資源服務(wù)器都是這種原理,如果參數(shù)在body中這種方式就失效了
4.直接通過實體接收參數(shù)
@RequestMapping(value = "/method04") public String method04(User user) { return JSON.toJSONString(user); }
這種方式要求請求中的參數(shù)名與實體中的屬性名一致即可自動映射到實體屬性中;
支持url拼接的多個params 傳參
支持post請求 的form類型傳參(form-data,x-www-form-urlencoded), 不支持JSON 傳參
5.@ModelAttribute 接收實體參數(shù)
@RequestMapping("/method05") public String method05(@ModelAttribute("user") User user) { return JSON.toJSONString(user); }
@ModelAttribute 注解主要作用是自動將數(shù)據(jù)暴露為模型數(shù)據(jù)用于視圖頁面展示時使用,比如此處注解value為user, 前端視圖就可以通過${user.name}來獲取綁定的命令對象的屬性
此用法與方法4完全一致,支持url拼接的多個params 傳參
可以用于接收url 或者from表單中的數(shù)據(jù)映射實體;
支持post請求 的form類型傳參(form-data,x-www-form-urlencoded), 不支持JSON 傳參
6.HttpServletRequest request接收參數(shù)
@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); }
傳統(tǒng)的接收參數(shù)方式,可以接收url params 傳參,支持post from類型傳參,不支持JSON傳參
注意如果請求中未傳遞指定名稱的參數(shù),取參時會報錯
7.@PathVariable RestFul 風(fēng)格傳參
@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實現(xiàn)restFul 風(fēng)格傳參,直接將參數(shù)拼接到url地址中,支持get,post,put delete 等多種請求
required屬性默認(rèn)為true ,不傳遞參數(shù)會報錯;
如果出現(xiàn)某個參數(shù)未傳遞的情況可以通過設(shè)置required屬性為false并設(shè)置多個value 字符串的形式實現(xiàn)
User實體類
@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); }
總結(jié):
以上就是七種常見的請求方式,不足之處請多指正啦
到此這篇關(guān)于Java 后端接收Request請求參數(shù)的多種方式匯總的文章就介紹到這了,更多相關(guān)Java 后端接收Request請求參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java常見問題之javac Hello.java找不到文件的解決方法
剛開始編寫java代碼時,肯定會遇到各種各樣的bug,當(dāng)然對于初學(xué)者這也是能理解的,下面這篇文章主要給大家介紹了關(guān)于Java常見問題之javac Hello.java找不到文件解決的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下。2018-01-01SpringBoot 錯誤處理機制與自定義錯誤處理實現(xiàn)詳解
這篇文章主要介紹了SpringBoot 錯誤處理機制與自定義錯誤處理實現(xiàn)詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11