Мне удалось воспроизвести мою проблему с минимальным изменением официального руководства Spring Boot для Доступ к данным с MongoDB , см. https://github.com/thokrae/spring-data-mongo-zoneddatetime.
После добавления поля java.time.ZonedDateTime
вкласс Customer, выполняющий пример кода из руководства, завершается с ошибкой CodecConfigurationException:
Customer.java:
public String lastName;
public ZonedDateTime created;
public Customer() {
вывод:
...
Caused by: org.bson.codecs.configuration.CodecConfigurationException`: Can't find a codec for class java.time.ZonedDateTime.
at org.bson.codecs.configuration.CodecCache.getOrThrow(CodecCache.java:46) ~[bson-3.6.4.jar:na]
at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:63) ~[bson-3.6.4.jar:na]
at org.bson.codecs.configuration.ChildCodecRegistry.get(ChildCodecRegistry.java:51) ~[bson-3.6.4.jar:na]
Это можно решитьизменив версию Spring Boot с 2.0.5.RELEASE на 2.0.1.RELEASE в pom.xml:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
Теперь исключение прошло, и объекты Customer, включая поля ZonedDateTime записано в MongoDB .
Я подал ошибку ( DATAMONGO-2106 ) в проекте spring-data-mongodb, но поймет, что изменение этого поведения нежелательно и не имеет высокогоприоритет.
Какой лучший обходной путь?При получении утки сообщения об исключении я нахожу несколько подходов, таких как регистрация настраиваемого кодека , настраиваемого преобразователя или использование Jackson JSR 310 .Я бы предпочел не добавлять пользовательский код в мой проект для обработки класса из пакета java.time.