Dies geschieht, weil LOCALDATE kein ist JavaBean (es keine Null-arg Konstruktor)Wie man das Feld java.time.LocalDate mit Orika abbildet?
Um dies zu beheben, können Sie eine LocalDateConverter erstellen müssen:
public class LocalDateConverter extends BidirectionalConverter<LocalDate, LocalDate> {
@Override
public LocalDate convertTo(LocalDate source, Type<LocalDate> destinationType) {
return (source);
}
@Override
public LocalDate convertFrom(LocalDate source, Type<LocalDate> destinationType) {
return (source);
}
}
und dann registrieren Sie diese Zeile hinzu:
mapperFactory.getConverterFactory().registerConverter(new LocalDateConverter());
als shorcut, können Sie stattdessen die mitgelieferte „PassThroughConverter“ registrieren, wie durch Adam Michalik vorgeschlagen so Orika nicht versucht, ein neues „LOCALDATE“ instanziieren:
DiesemapperFactory.getConverterFactory().registerConverter(new PassThroughConverter(LocalDate.class));
Die Quelle und das Ziel sind nicht Bohnen, und ich sehe nicht, wie ein unveränderliches Objekt mit einem neuen Wert wiederverwendet werden könnte, da es „unveränderlich“ (Unveränderliche Objekte sind einfach Objekte, deren Zustand (die Daten des Objekts) sich nach der Konstruktion nicht ändern können. – Tristan
Haben Sie versucht, es mit dem PassThroughConverter auszuführen? Was ich verstehe, Sie möchten kein LocalDate mit einem neuen Wert haben - Sie möchten, dass das Ziel LocalDate den gleichen Wert wie das Source LocalDate hat. Da LocalDate unveränderlich ist, müssen Sie kein neues LocalDate-Objekt erstellen, um dies zu erreichen. Sie können dasselbe Objekt für das Ziel wie für die Quelle verwenden. –
mmm ok, du hast Recht, ich habe meinen Anwendungsfall vergessen. Wenn es funktioniert, ist Ihre Lösung sauberer. Ich weiß nicht warum ich "return (LocalDate.from (source))" anstelle von "return source" geschrieben habe – Tristan