使用BeanUtils时,遇到日期类型的空值时会抛错的解决办法

转载 2018年04月17日 11:25:01

在使用BeanUtils的populate方法或者getProperty、setProperty方法时都会调用convert进行转换,但Converter只支持一些基本的类型,对于日期类型却不支持。如果源目标中包含日期类型字段,而且该字段值为空时,就会出现异常,无法赋值,解决方法如下:

 

1、新建一个转换器类,该类实现Converter接口,在convert方法中实现日期类型值的转换逻辑

public class DateConverter implements Converter{
    public Object convert(Class type, Object value){
        if(value == null){
            return null;
        }else if(type == Timestamp.class){
            return convertToDate(type, value, "yyyy-MM-dd HH:mm:ss");
        }else if(type == Date.class){
            return convertToDate(type, value, "yyyy-MM-dd");
        }else if(type == String.class){
            return convertToString(type, value);
        }

        throw new ConversionException("不能转换 " + value.getClass().getName() + " 为 " + type.getName());
    }

    protected Object convertToDate(Class type, Object value, String pattern) {
     SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        if(value instanceof String){
            try{
                if(CommonUtils.isEmpty(value.toString())){
                 return null;
                }
                Date date = sdf.parse((String) value);
                if(type.equals(Timestamp.class)){
                    return new Timestamp(date.getTime());
                }
                return date;
            }catch(Exception pe){
                return null;
            }
        }else if(value instanceof Date){
         return value;
        }
       
        throw new ConversionException("不能转换 " + value.getClass().getName() + " 为 " + type.getName());
    }

    protected Object convertToString(Class type, Object value) {
        if(value instanceof Date){
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         
            if (value instanceof Timestamp) {
                sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            }
           
            try{
                return sdf.format(value);
            }catch(Exception e){
                throw new ConversionException("日期转换为字符串时出错!");
            }
        }else{
            return value.toString();
        }
    }
}

2、注册BeanUtils转换器

ConvertUtils.register(new DateConverter(), java.util.Date.class);










Microsoft Windows XP--开发人员,准备好了?

Microsoft Windows XP:它为开发人员提供了什么? 摘要:本文介绍 Microsoft Windows XP 的一些新特性并探讨这些变化给 Windows 软件带来的影响。集中讨论了 ...
  • coolstar
  • coolstar
  • 2001-05-04 13:33:00
  • 980

BeanUtils.copyProperties() 拷贝对象属性时,日期为空的处理

org.apache.commons.beanutils.BeanUtils BeanUtils.copyProperties() 方法在处理数据类型为日期的属性的值的时候,如果值为空的...
  • zhangfeng2124
  • zhangfeng2124
  • 2017-03-10 14:12:25
  • 1435

BeanUtils.copyProperties属性拷贝日期为空异常

apache.common下的属性拷贝,日期为空会抛异常 解决方案:  ConvertUtils.register(new DateConverter(null), java.util.Date....
  • u013071311
  • u013071311
  • 2016-09-08 09:24:02
  • 2048

自定义BeanUtils处理时间格式转换

BeanUtils.populate( Object bean , Map properties );可以使Map转对应的对象,但是如果是bean有个日期字段而Map中这个日期字段传过来是字符串,数据...
  • shuaicihai
  • shuaicihai
  • 2017-01-26 11:03:45
  • 2952

让BeanUtils的copyProperty方法支持String与java.util.Date的类型转换

刚开始使用BeanUtils的copyProperties的bean属性复制方法结果发现它复制属性的时候,只支持java.sql.Date与String的类型转换,但是由于我们的pojo是使用java...
  • fableking
  • fableking
  • 2008-07-12 16:29:00
  • 7502

beanUtils之日期转换器的使用

*@Test public void test2() throws Exception { // 模拟表单数据 String name = "jack"; String age = "2...
  • Tomsheng321
  • Tomsheng321
  • 2017-01-28 13:12:14
  • 1025

Spring 的BeanUtils.copyProperties在拷贝属性时忽略空值

最近在写一个小玩意的时候,需要在两个对象之间拷贝属性 使用的是 BeanUtils.copyProperties 可是,有一个问题 就是当src对象的键值为Null时 就会把target对象...
  • u010186511
  • u010186511
  • 2016-06-06 15:22:08
  • 12879

BeanUtils将request封装到Bean(日期转换器)

首页 开源项目 讨论区 代码 博客 翻译 资讯 移动开发 招聘 城市圈 当前访客身份:游客 [ 登录 | 加入开源中国 ] 开源中国 代码分享 ...
  • xj626852095
  • xj626852095
  • 2014-11-06 16:45:53
  • 966

JSONObject转Java对象,日期类型为空值时报错

通过以下语句,可以转换JSON中日期到JAVA Date类型 JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new S...
  • kakolukiya
  • kakolukiya
  • 2015-12-08 16:28:58
  • 1302

BeanUtils.copyProperties忽略null值

主要思路是继承BeanUtilsBean这个类,然后重载copyProperties方法,用法new BeanCopyUtil(). copyProperties() 最后一个参数,如果是true,忽...
  • piaoxiangjijie
  • piaoxiangjijie
  • 2016-07-28 11:34:25
  • 6460
收藏助手
不良信息举报
您举报文章:使用BeanUtils时,遇到日期类型的空值时会抛错的解决办法
举报原因:
原因补充:

(最多只允许输入30个字)