一、请求参数的绑定:
SpringMVC 绑定请求参数的过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的。
支持的数据类型:
基本类型参数:包括基本类型和 String 类型
POJO 类型参数:包括实体类,以及关联的实体类
数组和集合类型参数:包括 List 结构和 Map 结构的集合(包括数组)
SpringMVC 绑定请求参数是自动实现的,但是要想使用,必须遵循使用要求。
使用要求:
1、如果是基本类型或者String类型:要求表单中参数名称必须和控制器中方法的形参名称保持一致(严格区分大小写)。
2、如果是 POJO类型,或者它的关联对象: 要求表单中参数名称和 POJO 类的属性名称保持一致(如果该类中有其他类的对象映射,表单中参数名称为对象映射名.属性名)。并且控制器方法的参数类型是 POJO 类型。
3、如果是集合类型,有两种方式:
第一种:要求集合类型的请求参数必须在 POJO 中。在表单中请求参数名称要和 POJO 中集合属性名称相同。
给 List 集合中的元素赋值,使用下标。userList[0].username,userList[0].age。
给 Map 集合中的元素赋值,使用键值对或下标。userMap[‘one’].username或userMap[0].username。
第二种:接收的请求参数是 json 格式数据。需要借助一个注解实现。
解决post请求中文乱码:
在web.xml中配置SpringMVC 自带的CharacterEncodingFilter拦截器:
!--配置解决中文乱码的过滤器-->
<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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
自定义类型转换:
获取到的表单数据显然都是字符类型,SpringMVC 默认有一些基础类型的转换,如转为Integer、Double等,但像日期类型就必须要求一定格式才能转换(例如SpringMVC支持转换2000/11/11的格式但不支持2000-11-11的格式),这时就需要用到自定义类型转换器。
1、定义一个类,实现 Converter 接口,该接口有两个泛型。
public class StringToDateConverter implements Converter<String, Date> {
@Override
public Date convert(String source) {
if(source == null){throw new RuntimeException("请输入正确日期");}
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
return df.parse(source);
} catch (Exception e) {
throw new RuntimeException("请输入正确日期");
}
}
}
2、在 spring配置文件中配置类型转换器。即将自定义的转换器注册到类型转换服务中去。
<!--配置自定义类型转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.itmao.utils.StringToDateConverter"></bean>
</set>
</property>
</bean>
3、在 annotation-driven标签中引用配置的类型转换服务。
!--开启MVC注解框架的支持-->
<mvc:annotation-driven enable-matrix-variables="true" conversion-service="conversionService"/>
**SpringMVC 还支持使用原始 ServletAPI 对象作为控制器方法的参数。**支持原始 ServletAPI 对象有: HttpServletRequest、HttpServletResponse、HttpSession、java.security.Principal、Locale、InputStream、OutputStream、Reader、Writer。我们想要使用其中的某些对象时直接将其作为参数写在控制类方法的参数中即可。