13

Commons beanUtilsの使用どのコンバーターにも、Dateconverterにnull値を無視し、デフォルトとしてnullを使用するように依頼する方法を知りたいです。例として、パブリッククラスを考えてみましょう。

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

そして私のconvertertestは、

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());
    }
}

日付がたまたまnullであるため、上記はNPEをスローします。これは私には非常に原始的なシナリオに見えますが、デフォルトで処理する必要があります(たとえば、x2のdate1の値はnullであると予想されます)。ドコは私がコンバーターにこれをするように頼むことができると私に言います。誰かがこれを行うための最良の方法について私に指摘できますか?

ConverterとisUseDefault()をtrueにしたくないのは、すべてのDate、Enum、および他の多くのコンバーターに対してそれを実行する必要があるためです。

4

5 に答える 5

45

どうやら、次のように見えます。ConvertUtilsにnull値に例外をスローしないように指示する方法があります。これは、を呼び出すことによって実現されます。

BeanUtilsBean.getInstance().getConvertUtils().register(false, false, 0);
于 2010-04-08T16:09:24.290 に答える
10

https://issues.apache.org/jira/browse/BEANUTILS-454で確認できるように、この問題は修正されているため、最善の解決策はBeanUtils1.9.0に更新することです。

于 2014-05-18T15:02:28.973 に答える
2

少し遅れるかもしれませんが、DateConverterを登録できるようです https://issues.apache.org/jira/browse/BEANUTILS-387

于 2012-04-27T16:07:13.860 に答える
1

最近この問題が発生し、このエラーを回避するために変数を文字列に変換し、必要に応じて日付に変換し直しました。最も洗練されたソリューションではありませんが、単純化のため、およびこのような問題を回避するために、これは実行可能なソリューションです。もう1つの注意点は、クラスが読み込まれる前にBeanUtilsがメソッドを起動することでした。そのため、カスタムクラスローダーを使用した問題に対するより複雑な解決策ではなく、これを選択しました。

ちなみに、バージョン1.8.0より前では、BeanUtils自体はこれらのnull値を無視していました。

詳細 な説明については、フィールドがjava.util.Dateでnull値の場合、「Date」に値が指定されていません。

于 2014-02-24T15:53:31.667 に答える
0

Beanにnull値を設定するような単純なケースには、次のように少し驚いています。

BeanUtils.setProperty(pojo, "date", null);

上記のように、クラッシュ動作を引き起こします。

それが価値があるものについては、ここに私の回避策があります:

import org.apache.commons.beanutils.BeanMap;

BeanMap beanMap = new BeanMap(pojo);
Method writeMethod = beanMap.getWriteMethod("date");
writeMethod.invoke(pojo, null);
于 2015-05-12T14:44:22.233 に答える