В проекте Spring Boot я использую аннотации, такие как @CreatedDate, для сохранения информации о датах создания / обновления соответствующих документов. ZonedDateTime используется во всем проекте, поэтому аннотированные поля также являются ZonedDateTime. Чтобы включить преобразование между форматом даты Mongo и ZonedDateTime, используются настраиваемые преобразователи.
Теперь при использовании Spring Boot 1.5.x настраиваемые конвертеры отлично работают для проверяемых полей. В Spring Boot 2.0.x настраиваемые конвертеры работают для всех полей, но не для проверяемых. Таким образом, если я удалю @EnableMongoAuditing, все будет работать нормально (все поля ZonedDateTime во всем проекте сохраняются и читаются из Mongo правильно), но поля даты создания / обновления остаются пустыми. Если я включаю аудит монго, я получаю следующее исключение при попытке сохранить документ:
java.lang.IllegalArgumentException: Invalid date type for member <MEMBER NAME>!
Supported types are [org.joda.time.DateTime, org.joda.time.LocalDateTime, java.util.Date, java.lang.Long, long]
Моя конфигурация Mongo:
@Configuration
@EnableMongoAuditing
public class MongoConfig {
@Bean
public MongoCustomConversions customConversions(){
List<Converter<?,?>> converters = new ArrayList<>();
converters.add(new ZonedDateTimeToDateConverter());
converters.add(new DateToZonedDateTimeConverter());
return new MongoCustomConversions(converters);
}
}
Вот так выглядят соответствующие поля:
abstract class BaseModel {
@Id
private String id;
@CreatedDate
private ZonedDateTime created;
@LastModifiedDate
private ZonedDateTime updated;
}
Есть ли способ заставить конвертеры работать для проверяемых полей mongo, кроме перехода на Spring Boot 1.5.x?




К вашему сведению, я изменил тип на java.util.Date и использую специальные средства доступа, но это не выглядит элегантно, и я чувствую, что мне здесь не хватает чего-то очевидного. Раньше это работало, должна быть причина, почему это не работает сейчас.