参数接收
Servlet API
在控制器方法上写上HttpServletRequest
, HttpServletResponse
, HttpSession
的形参,框架在调用控制器方法的时候会将形参初始化。
当然初始化完毕Servlet API
后,控制器方法当中可以直接像使用Servlet
一样获取参数,设置编码等操作,但是还是框架提供了更简便的方式:如逐个接收,对象接受等方式。
@RequestMapping("/some.do", method=ReqeustMethod.GET)
public ModelAndView doSome(HttpServletRequest req, HttpServletResponse resp, HttpSession session) {
ModelAndView mv = new ModelAndView();
return mv;
}
逐个接收
只需要在处理器方法上声明对应的形式参数即可,框架会完成自动的类型转换,但是要求形惨名称和请求参数名称保持一致。
<form action="some.do" method="POST">
<input type="text" name="name"/> <br/>
<input type="text" name="age"/> <br/>
</form>
@RequestMapping("/some.do", method=ReqeustMethod.POST)
public ModelAndView doSome(String name, Integer age) {
ModelAndView mv = new ModelAndView();
return mv;
}
对象接收
框架会将接收到请求参数封装成对定POJO
, 前提是请求参数名称和POJO
的属性名称需要保持一致。
public class User {
String name;
int age;
// 省略 getter/setter
}
<form action="some.do" method="POST">
<input type="text" name="name"/> <br/>
<input type="text" name="age"/> <br/>
</form>
@RequestMapping("/some.do", method=ReqeustMethod.POST)
public ModelAndView doSome(String name, Integer age) {
ModelAndView mv = new ModelAndView();
return mv;
}
@RequestParam注解
当在进行逐个接收的时候解决请求参数和形参不一致的情况.
```html
<form action="some.do" method="POST">
<input type="text" name="rname"/> <br/>
<input type="text" name="rage"/> <br/>
</form>
@RequestMapping(value = "/some.do", method = RequestMethod.POST)
public ModelAndView doSome(@RequestParam("rname") String name, @RequestParam("rage") Integer age) {
ModelAndView mv = new ModelAndView();
return mv;
}
Required 属性:
当使用逐个参数接收的时候,当请求参数缺少的情况下,会发生错误,因此需要声明参数是否为必须。
@RequestParam(value="rname", required=false) // 表明请求参数中可以没有rname参数。