Поля ZonedDateTime с аудитом Mongo не работают в Spring Boot 2

В проекте 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 и использую специальные средства доступа, но это не выглядит элегантно, и я чувствую, что мне здесь не хватает чего-то очевидного. Раньше это работало, должна быть причина, почему это не работает сейчас.

Vlad 18.04.2018 08:49
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
1
508
0

Другие вопросы по теме