springmvc参数类型转换三种方式

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以前使用正常,以后的版本需要使用< mvc:annotation-driven/>注册使用)使用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

   具体原因请参考:

                SpringMVC配置全局日期转换器,处理日期转换异常

      1.注册ConversionService

 

        
        
            
                
                    
                        
                    
                
            
        

  2. 需要修改springmvc-servlet xml配置文件中的annotation-driven,增加属性conversion-service指向新增的   conversionService。

    
        
            
                
                
                
                    
                        
                        
                        
                        
                        
                    
                
            
        
    

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐
  • —软件人才免语言低担保 赴美带薪读研!—



你可能感兴趣的:(springmvc,参数,类型)