Frage

Mit Commons BeanUtils Ich möchte wissen, wie jeder Konverter fragen die Dateconverter sagen Nullwerte und die Verwendung null als Standard zu ignorieren. Als Beispiel betrachten wir eine öffentliche Klasse,

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

und meine convertertest wie,

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

Das oben wirft einen NPE seit dem Datum null sein geschieht. Das sieht ein sehr primitives Szenario mir die standardmäßig behandelt werden soll (wie in, ich würde erwarten, x2 Nullwert für date1 hat). Die doco sagt mir, dass ich die

Andere Tipps

Vielleicht ein wenig spät, aber sieht, dass Sie einen Dateconverter registrieren https://issues.apache.org/jira/browse/BEANUTILS-387

ich vor kurzem lief in dieser Frage und konvertiert nur meine Variable in einen String um diesen Fehler zu vermeiden, und konvertiert sie zu einem Zeitpunkt zurück, wenn nötig. Nicht die eleganteste Lösung, aber der Einfachheit halber und zur Vermeidung von Problemen wie diese, es ist eine praktikable Lösung. Der andere Nachteil war, dass BeanUtils wäre es Methoden vor meinen Klassen abfeuern würde geladen werden, so dass ich für diese eher als eine kompliziertere Lösung für das Problem mit benutzerdefinierten Klassenladeprogramme entschieden haben.

Durch die Art und Weise, vor verion 1.8.0 BeanUtils selbst würde diese Nullwerte ignorieren.

Siehe diesen Link: Kein Wert für ‚Datum‘ angegeben, wenn das Feld ein java.util.Date mit einem Nullwert ist für eine ausführliche Erklärung.

Ich bin etwas erstaunt, dass eine solche einfachen Fall als einen Nullwert in einer Bean Einstellung wie folgt aus:

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

verursacht Verhalten abstürzt, wie oben beschrieben.

Für das, was es wert ist, hier ist mein Problem zu umgehen:

import org.apache.commons.beanutils.BeanMap;

BeanMap beanMap = new BeanMap(pojo);
Method writeMethod = beanMap.getWriteMethod("date");
writeMethod.invoke(pojo, null);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top