虽然我们前面在获取参数时看起来非常轻松,但是在这个过程中是有可能出现一些问题的。例如,请求参数为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@Overridepublic Date convert(String s) {return null;}}
1.2、实现convert方法
//被转换的格式为String,返回值值Date@Overridepublic Date convert(String source) {Date date=null;try {//String-->Date 2001-05-02SimpleDateFormat 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";}
