Ciò si verifica perché LocalDate non è un JavaBean (non ha costruttore zero arg)Come mappare il campo java.time.LocalDate con Orika?
Per risolvere questo problema, è necessario creare un LocalDateConverter:
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);
}
}
e quindi registrarlo aggiungendo questa linea:
mapperFactory.getConverterFactory().registerConverter(new LocalDateConverter());
come scorciatoia, si può invece registrare il "PassThroughConverter" fornito come suggerito da Adam Michalik modo Orika non tenta di instanciate un nuovo "LocalDate":
mapperFactory.getConverterFactory().registerConverter(new PassThroughConverter(LocalDate.class));
L'origine e la destinazione non sono fagioli, e io non vedo come un oggetto immutabile, potrebbe essere riutilizzato con un nuovo valore dal momento che è "immutabile" (oggetti immutabili sono semplicemente oggetti il cui stato (i dati dell'oggetto) non possono cambiare dopo la costruzione). – Tristan
Hai provato a farlo funzionare con PassThroughConverter? Quello che capisco, non vuoi avere un LocalDate con un nuovo valore: vuoi che il LocalDate di destinazione abbia lo stesso valore del LocalDate di origine. Dato che LocalDate è immutabile, non è necessario creare un nuovo oggetto LocalDate per ottenerlo: puoi utilizzare lo stesso oggetto per target come per source. –
mmm ok, hai ragione, ho dimenticato il mio caso d'uso. Se funziona, la soluzione è più pulita. Non so perché ho scritto "return (LocalDate.from (source))" invece di "return source" – Tristan