原生servlet接收参数
// 接收年龄参数
String ageStr = request.getParameter("age");
Integer age = Integer.parseInt(ageStr);
说到底,SpringMVC是对servlet的封装,所以他简化了很多操作,就包括接收参数。SpringMVC在接收参数时,直接在handler方法中声明形参即可。比如同样的接收年龄参数:
@RequestMapping("xxx")
public String handle(Integer age) {
System.out.println(age);
}
默认支持servlet API作为参数
当需要使⽤HttpServletRequest、HttpServletResponse、HttpSession等原⽣servlet对象时,直接在handler⽅法中形参声明使⽤即可。
例如获取并使用HttpServletRequest对象:
@RequestMapping("/handle02")
public ModelAndView handle02(HttpServletRequest request,
HttpServletResponse response,HttpSession session) {
String id = request.getParameter("id");
}
绑定简单类型参数
- 入参直接声明即可,形参名称和请求传递进来的参数名称保持一致即可
- 如果名称不一致,形参上使用@RequestParam注解映射,例如传入的参数名称是a,形参定义的名称是b(尽量不要这么用)
@RequestMapping("/handle03")
public ModelAndView handle03(@RequestParam("a") Integer b) {
doSth();
}
- 建议使用包装数据类型,因为请求传进来的参数可能没有值,简单数据类型不能是空,会报错
- 注意布尔类型,传进来的值只能是true,false,0,1四种情况
绑定pojo类型参数
比较常用,比如填写一个报名表单,请求传进来一系列参数,服务端希望用一个pojo接收,又不想一个个去set,那直接定义一个pojo,只要里面的属性名称和请求传进来的参数名称一致,框架就会帮我们自动绑定上。
当pojo1中有pojo2的属性时,使用pojo2.xxx 来传递参数即可,xxx就是pojo2中属性的名称。
例如:定义一个Order,其中有User对象成员
public class Order{
String id;
User user;
}
public class User{
String name;
int age;
}
handeler入参类型是Order,则如下请求即可:
localhost:8080/handle?id=1&user.name=xiaoming&user.age=20
@RequestMapping("/handle")
public ModelAndView handle(Order order) {
dosth();
}
日期类型绑定
日期类型比较特殊,这个需要自定义类型转换器来处理
请求:
localhost:8080/handle?day=2020-05-21
服务端handler方法:
@RequestMapping("/handle06")
public ModelAndView handle06(Date day) {
doSth();
}
自定义类型转换器,需要实现Converter接口,两个泛型,第一个是源参数类型,第二个是目标参数类型
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String source) {
// 完成字符串向⽇期的转换
SimpleDateFormat simpleDateFormat = new
SimpleDateFormat("yyyy-MM-dd");
try {
Date parse = simpleDateFormat.parse(source);
return parse;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
最后在spring的xml配置文件中注册上转换器即可
<mvc:annotation-driven conversionservice="conversionServiceBean"/>
<!--注册⾃定义类型转换器-->
<bean id="conversionServiceBean"
class="org.springframework.format.support.FormattingConversionServiceF
actoryBean">
<property name="converters">
<set>
<bean class="com.xxx.DateConverter"></bean>
</set>
</property>
</bean>