SpringMVC-自定义类型转换器
1.为什么要自定义类型转换器?
首先要知道我们在页面中提交的数据都是字符串类型,比如年龄,用户名,密码等;
在springMVC中,为了接受前端的参数,给我们提供了一种简便方式,就是可以用javaBean对象来接收参数
前提是javaBean中的属性名要和页面中的提交的名字相同
<input type="text" name="username">
<input type="text" name="age">
那么在javaBean中对应的属性名就必须是username;
注意这里的属性其实是对应的成员变量的set方法名,去掉set,然后首字母小写
即属性==setUsename–>Username–>username
class User{
private String username;
private Integer age;
public void setUsername(String username){
this.username= username
}
......
}
之后就会把页面传入的参数通过set方法赋值给成员变量
不过,这里成员变量age是Integer类型的?
然而传入的是字符串?是怎样赋值的呢?不会报错吗?
其实这里不用担心,springMVC已经给我们把传入的数据进转换(通过默认的转换器)为对应的类型;
不过当我们的类型是Date日期类型时,SpringMVC就不太友好了;他规定了我们传入的日期类型的格式,比如写2020/11/1可以成功,但是我们写2020-11-1就会报错;
因此针对这一点,我们需要自己写一个转换器来解决这一问题!!
2.如何定义自定义类型转换器
1.首先我们需要自定义一个类实现Converter<S,T>接口
(注意不要导错包!!)
public class MyConverter implements Converter<String, Date>{
/*
* s:指的是传进来的值
* */
@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="com.jw.Converter.MyConverter"></bean>
</set>
</property>
</bean>
这一步是在ConversionServiceFactoryBean组件中加上自己定义的转换器;
接下来在mvc名称空间中声明即可:
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
这样自定义类型转换器就ok了,你自己写的转换器会加在springMVC默认的转换器之中,也就是现在日期可以支持你定义的那种格式了