我们都知道,表单请求参数都是基于 key=value的/
springMVC绑定请求参数的过程时通过把表单提交请求参数,
作为控制器中方法参数进行绑定的。
1.支持的数据类型:
2.使用要求:
如果是基本类型或者 String类型:
要求我们的参数名称必须和控制器中方法的形参名称保持一致。(严格区分大小写)
如果是 POJO类型,或者它的关联对象:
要求表单中参数名称和 POJO 类的属性名称保持一致。并且控制器方法的参数类型是 POJO 类型。
如果是集合类型,有两种方式:
第一种:
要求集合类型的请求参数必须在 POJO 中。在表单中请求参数名称要和 POJO 中集合属性名称相同。
给 List 集合中的元素赋值,使用下标。
给 Map 集合中的元素赋值,使用键值对。
第二种:
接收的请求参数是 json 格式数据。需要借助一个注解实现。
注意: 它还可以实现一些数据类型自动转换。内置转换器全都在:org.springframework.core.convert.support 包下。
如遇特殊类型转换要求,需要我们自己编写自定义类型转换器。
3.基本类型和String类型做参数
注意:我们的参数名称必须和请求key值称保持一致。(严格区分大小写)
4.POJO 类型作为参数
业务模型
表单
controller
测试结果
配置WEB-INF下web.xml 解决中文乱码问题
<!--配置解决中文乱码的过滤器-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
以上还存在一个小问题,生日必须严格以 / 分割,这样springMVC框架才会为我们自动类型转换,也可以自己DIY如下:当用户输入以 - 分割为例
//类型转换工具类
//Converter<String,Date> ,第二个为转出类型
public class StringToDateConverter implements Converter<String,Date> {
public Date convert(String source){
//判断
if (source==null){
throw new RuntimeException("请传入数据");
}
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try{
return df.parse(source);
} catch (ParseException e) {
throw new RuntimeException("数据类型转换出现错误");
}
}
}
配置类型转换器给springmvc框架自动调用,id必须是 conversionService
<!--配置自定义类型转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="cn.itcast.utils.StringToDateConverter"/>
</set>
</property>
</bean>
5.POJO 类中包含集合类型参数
业务模型domian
jsp表单写法
<form action="/user/testUserAndAccount" method="post">
姓名:<input type="text" name="username" /><br/>
密码:<input type="text" name="password" /><br/>
用户姓名:<input type="text" name="accounts[0].username" /><br/>
用户余额:<input type="text" name="accounts[0].money" /><br/>
用户姓名:<input type="text" name="accountMap['one'].username" /><br/>
用户余额:<input type="text" name="accountMap['one'].money" /><br/>
<input type="submit" value="提交" />
</form>
controller
@RequestMapping ("/testUserAndAccount")
public String testUserAndAccount(User user){
System.out.println(user);
return "success";
}
测试结果: