Это происходит потому, что LocalDate не JavaBean (он не имеет нулевой ARG конструктор)Как сопоставить java.time.LocalDate с Orika?
Чтобы это исправить, необходимо создать 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);
}
}
, а затем зарегистрировать его, добавив следующую строку:
mapperFactory.getConverterFactory().registerConverter(new LocalDateConverter());
Как shorcut, вы можете вместо этого зарегистрировать предоставленный «PassThroughConverter», как предложил Адам Михалик так Orika не пытается создать экземпляр нового «LocalDate»:
mapperFactory.getConverterFactory().registerConverter(new PassThroughConverter(LocalDate.class));
Источника и цель не являются бобами, и я не вижу, как неизменный объект может быть использован повторно с новым значением, так как это «неизменное» (Неизменные объекты просто объекты, состояние которых (данные объекта) не могут измениться после построения). – Tristan
Вы пробовали запустить его с помощью PassThroughConverter? Насколько я понимаю, вы не хотите иметь LocalDate с новым значением - вы хотите, чтобы целевая локальная база имела то же значение, что и исходная локальная дата. Поскольку LocalDate неизменен, для этого вам не нужно создавать новый объект LocalDate, вы можете использовать тот же объект для цели, что и для источника. –
mmm ok, вы правы, я забыл о моем случае использования. Если это сработает, ваше решение будет чище. Я не знаю, почему я написал «return (LocalDate.from (source)) вместо« return source » – Tristan