当输入的url为http://localhost:8090/convert?time=1992-02-03时,这边传递的time的类型是字符串,springmvc中没有直接提供String转换成Date的转换器,所以用Date类型的参数进行接收时,会发生错误。
@GetMapping("/convert")
public String convert(Date time, Model model){
model.addAttribute("msg", "转换成功");
return "hello";
}
发生错误:
这边要自定义一个字符串到Date的转换器
- 定义一个转换器类
public class StringToDateConvert implements Converter<String,Date>{
public Date convert(String s) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = simpleDateFormat.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
- springmvc.xml中需要注册该转换器
在ConversionServiceFactoryBean中,可以发现converters是该类的一个成员变量。
public class ConversionServiceFactoryBean implements FactoryBean<ConversionService>, InitializingBean {
@Nullable
private Set<?> converters;
@Nullable
private GenericConversionService conversionService;
public ConversionServiceFactoryBean() {
}
public void setConverters(Set<?> converters) {
this.converters = converters;
}
}
所以在springmvc中配置时,可以在ConversionServiceFactoryBean中注入该属性,即注入自定义的由String转成Date的类型转换器。
<bean id="convertService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<array>
<bean class="com.kuang.convert.StringToDateConvert"></bean>
</array>
</property>
</bean>
最后引用该转换服务
<mvc:annotation-driven conversion-service="convertService"/>