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