虽然我们前面在获取参数时看起来非常轻松,但是在这个过程中是有可能出现一些问题的。例如,请求参数为success=1,我们期望把这请求参数取出来赋值给一个Boolean类型的变量。这里就会涉及到String—>Boolean的类型转换了,实际上SpringMVC中内置了很多类型转换器,来进行类型转换。也有专门进行String—>Boolean类型转换的转换器StringToBooleanConverter
如果是符合SpringMVC内置转换器的转换规则,就可以很轻松的实现转换,但是如果不符合规则呢?例如,请求参数为birthday=2003-12-12,我们期望把这个请求参数获取出来赋值给一个Date类型的变量。就不符合内置的规则了。内置的可以把2004/12/12这种格式进行转换,这种情况下,我们就可以选择自定义类型转换。

1、自定义类型转换器

1.1、创建类实现Converter接口

  1. package converter;
  2. import org.springframework.core.convert.converter.Converter;
  3. import java.util.Date;
  4. public class StringToDateConverter implements Converter<String, Date> {
  5. //被转换的格式为String,返回值值Date
  6. @Override
  7. public Date convert(String s) {
  8. return null;
  9. }
  10. }

1.2、实现convert方法

  1. //被转换的格式为String,返回值值Date
  2. @Override
  3. public Date convert(String source) {
  4. Date date=null;
  5. try {
  6. //String-->Date 2001-05-02
  7. SimpleDateFormat simpleDateFormat=new SimpleDateFormat("YYYY-MM-dd");
  8. date = simpleDateFormat.parse(source);
  9. } catch (ParseException e) {
  10. e.printStackTrace();
  11. }
  12. return date;
  13. }

1.3、配置让SpringMVC使用自定义转换器
Snipaste_2021-08-01_13-24-41.jpg

  1. <bean class="org.springframework.context.support.ConversionServiceFactoryBean" id="myConversionService">
  2. <property name="converters">
  3. <set>
  4. <bean class="converter.StringToDateConverter"/>
  5. </set>
  6. </property>
  7. </bean>

2、日期转换简便解决方案

如果是String到Date的转换,我们也可以使用另外一种更加简便的方式。使用@DateFormat来指定字符串的格式。(注意是pattern

  1. @RequestMapping("/user")
  2. public String test01(@DateTimeFormat(pattern ="yyyy-MM-dd") @RequestParam("birthday")Date birthday){
  3. System.out.println(birthday);
  4. return "hello";
  5. }