应用场景:我们在数据库中定义了出生日期字段类型为date,在浏览器中的form表单中填写数据,springmvc内置了十种过滤器模式,当你将日期写成xx/xx/xx格式可以被内置解析,但是xx-xx-xx这种格式会抛出 400 Bad Request请求异常,所以我们自定义过滤器配置使用
1.实现接口Converter<S,T>
1.1 创建StringDateFormat类
/*
类型转换
*/
public Date convert(String s) {
if (s == null) {
throw new RuntimeException("参数不能为空");
}
try {
// 解析字符串 Date date = df.parse(source); return date;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date = df.parse(s);
return date;
} catch (Exception e) {
throw new RuntimeException("类型转换错误");
}
}
1.2 在springmvc配置文件中配置ConversionServiceFactoryBean工厂
<bean class="org.springframework.context.support.ConversionServiceFactoryBean" id="conversionService">
<property name="converters">
<set>
<bean class="cn.itcast.controller.StringDateFormate"></bean>
</set>
</property>
</bean>
1.3 模拟实体类
public class UserAccount implements Serializable {
private Date date;
(...省略toString get() set() )
}
1.4 在没添加之前输入xx-xx-xx发出错误请求界面:
2.编写Controller类
@RequestMapping("/getDate")
public String getDate(UserAccount account){
System.out.println("date : " + account);
return "success";
}
2.1 输入xx-xx-xx日期类型,控制台输出结果为:
date : UserAccount{date=Tue Dec 11 00:00:00 CST 1212}
2.中文乱码问题解决
<!-- 配置过滤器 -->
<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>
好了,这就是简易自定义过滤器的使用了,有什么不同的见解可以一起探讨