分享

DateConverter does not support default String to 'Date' conversion.

 ruodream 2016-06-23

     在使用 beanutils 工具类时,因为beanUtils不提供直接将字符串转换成Date(java.util.Date)数据类型的方法,

查看源码,beanutils支持的转化类型如下:

* java.lang.BigDecimal
* java.lang.BigInteger
* boolean and java.lang.Boolean
* byte and java.lang.Byte
* char and java.lang.Character
* java.lang.Class
* double and java.lang.Double
* float and java.lang.Float
* int and java.lang.Integer
* long and java.lang.Long
* short and java.lang.Short
* java.lang.String
* java.sql.Date
* java.sql.Time
* java.sql.Timestamp

所以,处理方式有2种,第一是将bean中的Date类型,引入java.sql.Date的包;第二种,就需要自己注册一个转换器。

源码里有提供 DateLocaleConverter 这个类做注册的转化器

ConvertUtils.register(new DateLocaleConverter(), Date.class);

当然,这里也能自己实现,

ConvertUtils.register(new Converter()
    {
       
 
      @SuppressWarnings("rawtypes")
      @Override
      public Object convert(Class arg0, Object arg1)
      {
        System.out.println("注册字符串转换为date类型转换器");
        if(arg1 == null)
        {
          return null;
        }
        if(!(arg1 instanceof String))
        {
          throw new ConversionException("只支持字符串转换 !");
        }
         
        String str = (String)arg1;
        if(str.trim().equals(""))
        {
          return null;
        }
         
        SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         
        try{
          return sd.parse(str);
        }
        catch(ParseException e)
        {
          throw new RuntimeException(e);
        }
         
      }
       
    }, java.util.Date.class);

现实环境中,工具类方法例子为:

public static void transMap2Bean(Map<String, Object> map, Object obj) {  
    //ConvertUtils.register(new DateLocaleConverter(), Date.class);
    ConvertUtils.register(new Converter()  
    {  
         
   
      @SuppressWarnings("rawtypes")  
      @Override  
      public Object convert(Class arg0, Object arg1)  
      {  
        System.out.println("注册字符串转换为date类型转换器");  
        if(arg1 == null)  
        {  
          return null;  
        }  
        if(!(arg1 instanceof String))  
        {  
          throw new ConversionException("只支持字符串转换 !");  
        }  
        String str = (String)arg1;  
        if(str.trim().equals(""))  
        {  
          return null;  
        }  
           
        SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
           
        try{  
          return sd.parse(str);  
        }  
        catch(ParseException e)  
        {  
          throw new RuntimeException(e);  
        }  
           
      }  
         
    }, java.util.Date.class);  
    if (map == null || obj == null) {  
      return;  
    }  
    try {  
      BeanUtils.populate(obj, map);  
    } catch (Exception e) {  
      System.out.println("Map<String,Object>转化Bean异常:" + e);  
    }  
  }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多