如何让BeanUtils忽略空值

Kan*_*ath 13 java apache-commons-beanutils

使用Commons beanUtils我想知道如何询问任何转换器说Dateconverter忽略空值并使用null作为默认值.作为一个例子考虑公共课,

public class X {
    private Date date1;
    private String string1;
    //add public getters and setters
}
Run Code Online (Sandbox Code Playgroud)

和我的转换为,

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Kan*_*ath 38

显然看起来,有一种方法可以告诉ConvertUtils不会在null值上抛出异常,这是通过调用实现的

BeanUtilsBean.getInstance().getConvertUtils().register(false, false, 0);
Run Code Online (Sandbox Code Playgroud)


Die*_*ntz 10

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

  • 这个问题正在发生,我在commons-beanutils的1.9.2版本上. (4认同)