SpringMVC绑定参数之类型转换有三种方式:
1. 实体类中加日期格式化注解
@DateTimeFormat(pattern="yyyy-MM-dd hh:MM")
private Date creationTime;
2.在Controller类的方法中加入一段代码
/**
* 在controller层中加入一段数据绑定代码
* @param webDataBinder
*/
@InitBinder
public void initBinder(WebDataBinder webDataBinder) throws Exception{
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
simpleDateFormat.setLenient(false);
webDataBinder.registerCustomEditor(Date.class , new CustomDateEditor(simpleDateFormat , true));
}
备注:自定义类型转换器必须实现PropertyEditor接口或者继承PropertyEditorSupport类
写一个类 extends propertyEditorSupport(implements PropertyEditor){
public void setAsText(String text){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy -MM-dd hh:mm");
Date date = simpleDateFormat.parse(text);
this.setValue(date);
}
public String getAsTest(){
Date date = (Date)this.getValue();
return this.dateFormat.format(date);
}
}
3.(spring 3.0以前使用正常,以后的版本需要使用注册使用)使用xml配置实现类型转换(系统全局转换器)
1.注册conversionservice
备注:StringtoDateConverter.java的实现:
/**
* Created by 苏 on 15-10-13.
*/
public class StringToDateConverter implements Converter {
private static final Logger logger = LoggerFactory.getLogger(StringToDateConverter.class);
private String pattern;
public StringToDateConverter(String pattern){
this.pattern = pattern;
}
public Date convert(String s) {
if(StringUtils.isBlank(s)){
return null;
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
simpleDateFormat.setLenient(false);
try{
return simpleDateFormat.parse(s);
}catch(ParseException e){
logger.error("转换日期异常:"+e.getMessage() , e);
throw new IllegalArgumentException("转换日期异常:"+e.getMessage() , e);
}
}
}
2.使用ConfigurableWebBindingInitializer注册conversionService
3.注册ConfigurableWebBindingInitializer到RequestMappingHandlerAdapter
此时可能有人会问,如果我同时使用 PropertyEditor 和 ConversionService,执行顺序是什么呢?内部首先查找PropertyEditor 进行类型转换,如果没有找到相应的 PropertyEditor 再通过 ConversionService进行转换。
4.(spring 3.2以后使用正常)使用注册conversionService
具体原因请参考:
1.注册ConversionService
2.需要修改springmvc-servlet xml配置文件中的annotation-driven,增加属性conversion-service指向新增的 conversionService。
分享到:
2015-10-13 18:19
浏览 4938
评论