上一段我们介绍了请求参数的绑定
SpringMVC请求参数的绑定
在请求参数绑定的时候,有时候会遇到一些问题,如自定义类型转换器异常
1.自定义类型转换器演示异常
现在有一个页面,想给服务器提交数据,现有uname,age,其中age是100.但是往后台提交的东西,100也是作为字符串来出现的,或者只要是页面,提交的任何数据,全部都是字符串类型的。在后台我们可以把数据全部都拿到。如果你提交的是一个字符串的话,后台类型是Integer,程序也没有报错,
springmvc内部中自动的进行了数据类型转换。
String-----Integer
即便字符串转日期,也是可以的,但是格式可能有些问题。
比如/11/11.可能会不报错,如果-11-11,可能不支持这个格式。
user类中有3个属性,还包括set和get方法,以及tostring方法
private String uname;private Integer age;private Date date;
index.jsp
<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="提交"/></form>
controller
/*自定义类型转化器*/@RequestMapping("/saveUser")public String saveUser(User user){System.out.println(user);return "success";}
在地址栏中输入
说明数据封装出错了,数据没封装进去,控制台没看到执行这个代码,在做类型转换的时候出错了
2.自定义类型转换器代码编写
第一步:定义一个类,实现Converter接口,该接口有两个泛型。
public interface Converter<S,T>{ }
(注册好了类型转换器之后,就不会出错了,前端控制器会找类型转换器帮助我们将字符串转换成为我们的日期)
Converter类型转换总接口
Converter有很多实现类
这个接口有两个泛型,前面指的是字符串,后面指的是具体类型。
如果T是日期,则字符串转换为日期。
注意,导入的是这个包
import org.springframework.core.convert.converter.Converter;
代码
/*把字符串转换为日期*/public class StringToDateConverter implements Converter<String,Date> {@Override/** 参数:传入过来的字符串* */public Date convert(String source) {if(source==null){throw new RuntimeException("请您传入数据");}else{DateFormat df=new SimpleDateFormat("yyyy-MM-dd");//把字符串转换为日期try {return df.parse(source);} catch (ParseException e) {throw new RuntimeException("数据类型转换出现了错误");}}}}
第二步:在 spring配置文件中配置类型转换器。
spring 配置类型转换器的机制是,将自定义的转换器注册到类型转换服务中去。
<!--配置自定义类型转换器--><bean id="conversionServiceFactoryBean" class="org.springframework.context.support.ConversionServiceFactoryBean"><!--我们需要把自己写的类型转换器注册一下--><property name="converters"><set><bean class="cn.yujie.utils.StringToDateConverter"/></set></property></bean>
第三步:在 annotation-driven标签中引用配置的类型转换服务,让类型转换器生效
<!--开启springmvc框架注解支持--><mvc:annotation-driven conversion-service="conversionService"/>