Ich benutze Orika 1.4.6 und ich möchte einen CustomConverter verwenden, um eines meiner Felder zuzuordnen. Wenn das Quellfeld null ist, scheint der Konverter nicht aufgerufen zu werden. Hier ist mein Code:Orika: CustomConverter nicht auf null Werte
class From {
String source;
}
class To {
String destination = "defaultValue";
}
public class Mapper extends ConfigurableMapper {
private class MyConverter extends CustomConverter<String, String> {
@Override
public String convert(String source, Type<? extends String> destinationType) {
if (null == source) {
return "NULL!";
}
return "->" + source + "<-";
}
}
@Override
protected void configure(MapperFactory factory) {
factory.getConverterFactory().registerConverter("converter", new MyConverter());
factory.classMap(From.class, To.class)
.fieldMap("source", "destination")
.mapNulls(true)
.converter("converter")
.add()
.register();
}
}
Wenn ich Karte folgendes Objekt:
From from = new From(); //from.source == null
Mapper mapper = new Mapper();
To to = mapper.map(from, To.class);
System.out.println(to.destination);
ich die folgende Ausgabe erwarten:
NULL!
Jedoch bekomme ich folgende:
null
was darauf hindeutet, dass der Konverter ist gar nicht und der Nullwert wird einfach kopiert, wegen
.mapNulls(true)
genannt Wenn ich jetzt
.mapNulls(false)
das Problem bleibt das gleiche gesetzt, wie der Nullwert im Quellfeld wird ignoriert was das Zielfeld unverändert lässt (in diesem Fall mit dem Wert "defaultValue").
Es wäre zum Beispiel möglich, die "anpassen" -Methode in Kombination mit einem CustomMapper zu verwenden. Allerdings ist diese Lösung in meiner realen Anwendung viel komplexer und daher scheint die Lösung mit dem CustomConverter viel geeigneter zu sein.
Weiß jemand, wo das Problem in diesem konkreten Beispiel ist?
Cheers, Robert
Ich benutze einen CustomMapper eine akzeptable Lösung für Sie? – Akah
Die Lösung mit einem CustomMapper funktioniert und ist korrekt. Ich denke jedoch, dass die oben skizzierte Lösung auf lange Sicht einfacher und einfacher zu pflegen wäre. Außerdem bin ich neugierig, ob dieses Verhalten beabsichtigt ist oder nicht. – Robert
Es wäre eine gute Lösung, aber ich glaube nicht, dass Konverter verwendet werden, wenn die Quelle "null" ist. Ein CustomMapper ist möglicherweise Ihre einzige Option, aber überlegen Sie, ob Sie den Betreuer fragen. Zuletzt habe ich überprüft, ob sie in einer Google-Mailingliste für das Projekt aktiv waren. – kab