在SpringMVC后臺(tái)控制層獲取參數(shù)的方式主要有兩種,,一種是request.getParameter("name"),,另外一種是用注解@RequestParam直接獲取,。這里主要講這個(gè)注解
一,、基本使用,,獲取提交的參數(shù)
后端代碼:
- @RequestMapping("testRequestParam")
- public String filesUpload(@RequestParam String inputStr, HttpServletRequest request) {
- System.out.println(inputStr);
-
- int inputInt = Integer.valueOf(request.getParameter("inputInt"));
- System.out.println(inputInt);
-
- // ......省略
- return "index";
- }
前端代碼:
- <form action="/gadget/testRequestParam" method="post">
- 參數(shù)inputStr:<input type="text" name="inputStr">
- 參數(shù)intputInt:<input type="text" name="inputInt">
- </form>
前端界面:
執(zhí)行結(jié)果:
test1
123
可以看到spring會(huì)自動(dòng)根據(jù)參數(shù)名字封裝進(jìn)入,我們可以直接拿這個(gè)參數(shù)名來用
二,、各種異常情況處理
1,、可以對(duì)傳入?yún)?shù)指定參數(shù)名
- @RequestParam String inputStr
- // 下面的對(duì)傳入?yún)?shù)指定為aa,如果前端不傳aa參數(shù)名,,會(huì)報(bào)錯(cuò)
- @RequestParam(value="aa") String inputStr
錯(cuò)誤信息:
HTTP Status 400 - Required String parameter 'aa' is not present
2,、可以通過required=false或者true來要求@RequestParam配置的前端參數(shù)是否一定要傳
- // required=false表示不傳的話,,會(huì)給參數(shù)賦值為null,required=true就是必須要有
- @RequestMapping("testRequestParam")
- public String filesUpload(@RequestParam(value="aa", required=true) String inputStr, HttpServletRequest request)
3,、如果用@RequestMapping注解的參數(shù)是int基本類型,,但是required=false,這時(shí)如果不傳參數(shù)值會(huì)報(bào)錯(cuò),,因?yàn)椴粋髦?,?huì)賦值為null給int,這個(gè)不可以
- @RequestMapping("testRequestParam")
- public String filesUpload(@RequestParam(value="aa", required=true) String inputStr,
- @RequestParam(value="inputInt", required=false) int inputInt
- ,HttpServletRequest request) {
-
- // ......省略
- return "index";
- }
解決方法:
“Consider declaring it as object wrapper for the corresponding primitive type.”建議使用包裝類型代替基本類型,,如使用“Integer”代替“int”
|