如何要求 BeanUtils 忽略空值

2022-09-04 05:06:24

使用Commons beanUtils,我想知道如何要求任何转换器说Dateconverter忽略null值并使用null作为默认值。例如,考虑一个公共类,

public class X {
    private Date date1;
    private String string1;
    //add public getters and setters
}

和我的转换器测试为,

public class Apache {

    @Test
    public void testSimple() throws Exception {
        X x1 = new X(), x2 = new X();
        x1.setString1("X");
        x1.setDate1(null);
        org.apache.commons.beanutils.BeanUtils.copyProperties(x2, x1);
        //throws ConversionException
        System.out.println(x2.getString1());
        System.out.println(x2.getDate1());
    }
}

上面抛出一个 NPE,因为日期恰好为 null。这对我来说是一个非常原始的场景,应该默认处理(例如,我希望x2对date1具有空值)。doco告诉我,我可以要求转换器这样做。有人可以告诉我这样做的最佳方法吗?

我不想掌握转换器和isUseDefault()是真的,因为那样我必须为所有日期,枚举和许多其他转换器做到这一点!


答案 1

显然,有一种方法可以告诉ConvertUtils不要在空值上引发异常,这是通过调用来实现的。

BeanUtilsBean.getInstance().getConvertUtils().register(false, false, 0);

答案 2

最好的解决方案是更新到BeanUtils 1.9.0,因为这个问题已经修复,正如你在这里看到的那样 https://issues.apache.org/jira/browse/BEANUTILS-454


推荐