1 使用场景:
时间格式: 2020-01-01 无法实现类型由String到Date的直接转换
实体类:
public class User implements Serializable {
private String uname;
private Integer age;
private Date date;
}
jsp 代码:
<%--自定类型转换器 时间格式: 2020-01-01--%>
<form action="param/saveUser" method="post">
用户姓名: <input type="text" name="uname"><br/>
用户年龄: <input type="text" name="age"><br/>
生日: <input type="text" name="date"><br/>
<input type="submit" value="提交"><br/>
</form>
控制器代码:
/**
* 自定义类型转换器
* @param user
* @return
*/
@RequestMapping("saveUser")
public String saveUser(User user){
System.out.println("执行了...");
System.out.println(user);
return "success";
}
报错:
Failed to convert value of type 'java.lang.String' to required type 'java.util.Date'
2 使用步骤
1 自定义类型转换器,实现 Converter 接口,该接口有两个泛型
/**
* 字符串转换日期
*/
public class StringTpDateConverter implements Converter<String, Date> {
@Override
public Date convert(String s) {
if(s == null){
throw new RuntimeException("请您传入数据");
}
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
// 把字符串转换成日
try {
return df.parse(s);
} catch (ParseException e) {
throw new RuntimeException("数据转换出现错误");
}
}
}
2 注册自定义类型转换器,在springmvc.xml配置文件中编写配置
<!-- 配置自定义转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters" >
<set>
<bean class="org.example.utils.StringTpDateConverter"></bean>
</set>
</property>
</bean>
3 在 annotation-driven 标签中引用配置的类型转换服务
<!-- 配置spring开启注解mvc的支持-->
<!-- 引用自定义类型转换器 -->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>