虽然我们前面在获取参数时看起来非常轻松,但是在这个过程中是有可能出现一些问题的。例如,请求参数为success=1,我们期望把这请求参数取出来赋值给一个Boolean类型的变量。这里就会涉及到String—>Boolean的类型转换了,实际上SpringMVC中内置了很多类型转换器,来进行类型转换。也有专门进行String—>Boolean类型转换的转换器StringToBooleanConverter
如果是符合SpringMVC内置转换器的转换规则,就可以很轻松的实现转换,但是如果不符合规则呢?例如,请求参数为birthday=2003-12-12,我们期望把这个请求参数获取出来赋值给一个Date类型的变量。就不符合内置的规则了。内置的可以把2004/12/12这种格式进行转换,这种情况下,我们就可以选择自定义类型转换。
1、自定义类型转换器
1.1、创建类实现Converter接口
package converter;
import org.springframework.core.convert.converter.Converter;
import java.util.Date;
public class StringToDateConverter implements Converter<String, Date> {
//被转换的格式为String,返回值值Date
@Override
public Date convert(String s) {
return null;
}
}
1.2、实现convert方法
//被转换的格式为String,返回值值Date
@Override
public Date convert(String source) {
Date date=null;
try {
//String-->Date 2001-05-02
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("YYYY-MM-dd");
date = simpleDateFormat.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
1.3、配置让SpringMVC使用自定义转换器
<bean class="org.springframework.context.support.ConversionServiceFactoryBean" id="myConversionService">
<property name="converters">
<set>
<bean class="converter.StringToDateConverter"/>
</set>
</property>
</bean>
2、日期转换简便解决方案
如果是String到Date的转换,我们也可以使用另外一种更加简便的方式。使用@DateFormat来指定字符串的格式。(注意是pattern)
@RequestMapping("/user")
public String test01(@DateTimeFormat(pattern ="yyyy-MM-dd") @RequestParam("birthday")Date birthday){
System.out.println(birthday);
return "hello";
}