"MappingException: No property null found on entity class java.time.OffsetDateTime to bind constructor parameter to!" 和 Spring MongoDB
"MappingException: No property null found on entity class java.time.OffsetDateTime to bind constructor parameter to!" with Spring MongoDB
正在尝试将新的 java.time.OffsetDateTime
对象与 MongoDB 一起使用。我正在使用 org.springframework.data:spring-data-mongodb:1.8.2.RELEASE
。它似乎能够很好地写入数据库,但是当我尝试读取数据时,它会抛出以下异常。如果我改为将我的对象更改为 LocalDateTime
,它能够成功地 read/write 到数据库。是否需要执行其他配置才能添加对 OffsetDateTime 对象的支持?
org.springframework.data.mapping.model.MappingException: No property null found on entity class java.time.OffsetDateTime to bind constructor parameter to!
at org.springframework.data.mapping.model.PersistentEntityParameterValueProvider.getParameterValue(PersistentEntityParameterValueProvider.java:74) ~[spring-data-commons-1.11.2.RELEASE.jar!/:na]
at org.springframework.data.mapping.model.SpELExpressionParameterValueProvider.getParameterValue(SpELExpressionParameterValueProvider.java:63) ~[spring-data-commons-1.11.2.RELEASE.jar!/:na]
at org.springframework.data.convert.ReflectionEntityInstantiator.createInstance(ReflectionEntityInstantiator.java:71) ~[spring-data-commons-1.11.2.RELEASE.jar!/:na]
at org.springframework.data.convert.ClassGeneratingEntityInstantiator.createInstance(ClassGeneratingEntityInstantiator.java:83) ~[spring-data-commons-1.11.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:251) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:231) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.readValue(MappingMongoConverter.java:1186) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.access0(MappingMongoConverter.java:78) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter$MongoDbPropertyValueProvider.getPropertyValue(MappingMongoConverter.java:1134) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.getValueInternal(MappingMongoConverter.java:870) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.doWithPersistentProperty(MappingMongoConverter.java:283) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.doWithPersistentProperty(MappingMongoConverter.java:271) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:309) ~[spring-data-commons-1.11.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:271) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:231) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
所以目前的 JSR-310 支持似乎只适用于非时区日期对象。这可以解释为什么 OffsetDateTime 不起作用。
https://spring.io/blog/2015/03/26/what-s-new-in-spring-data-fowler
This setup will make sure that both your application package and the
Spring Data JPA one for the JSR-310 converters will be scanned and
handed to the persistence provider. Find a complete example for that
in our Spring Data Examples repository. Note, that due to the fact
that the converter simply converts the JSR-310 types to legacy Date
instances, only non-time-zoned (e.g. LocalDateTime etc.) are
supported.
我可以通过回退到使用 Joda DateTime 对象来解决这个问题。我必须执行以下操作:
- 将
compile('com.fasterxml.jackson.datatype:jackson-datatype-joda:2.6.3')
添加到 gradle.build 文件。
- 将
spring.jackson.serialization.write_dates_as_timestamps=false
添加到 application.properties 文件以使输出易于阅读。
import org.joda.time.DateTime;
并使用它代替 OffsetDateTime
正在尝试将新的 java.time.OffsetDateTime
对象与 MongoDB 一起使用。我正在使用 org.springframework.data:spring-data-mongodb:1.8.2.RELEASE
。它似乎能够很好地写入数据库,但是当我尝试读取数据时,它会抛出以下异常。如果我改为将我的对象更改为 LocalDateTime
,它能够成功地 read/write 到数据库。是否需要执行其他配置才能添加对 OffsetDateTime 对象的支持?
org.springframework.data.mapping.model.MappingException: No property null found on entity class java.time.OffsetDateTime to bind constructor parameter to!
at org.springframework.data.mapping.model.PersistentEntityParameterValueProvider.getParameterValue(PersistentEntityParameterValueProvider.java:74) ~[spring-data-commons-1.11.2.RELEASE.jar!/:na]
at org.springframework.data.mapping.model.SpELExpressionParameterValueProvider.getParameterValue(SpELExpressionParameterValueProvider.java:63) ~[spring-data-commons-1.11.2.RELEASE.jar!/:na]
at org.springframework.data.convert.ReflectionEntityInstantiator.createInstance(ReflectionEntityInstantiator.java:71) ~[spring-data-commons-1.11.2.RELEASE.jar!/:na]
at org.springframework.data.convert.ClassGeneratingEntityInstantiator.createInstance(ClassGeneratingEntityInstantiator.java:83) ~[spring-data-commons-1.11.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:251) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:231) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.readValue(MappingMongoConverter.java:1186) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.access0(MappingMongoConverter.java:78) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter$MongoDbPropertyValueProvider.getPropertyValue(MappingMongoConverter.java:1134) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.getValueInternal(MappingMongoConverter.java:870) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.doWithPersistentProperty(MappingMongoConverter.java:283) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.doWithPersistentProperty(MappingMongoConverter.java:271) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:309) ~[spring-data-commons-1.11.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:271) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:231) ~[spring-data-mongodb-1.8.2.RELEASE.jar!/:na]
所以目前的 JSR-310 支持似乎只适用于非时区日期对象。这可以解释为什么 OffsetDateTime 不起作用。
https://spring.io/blog/2015/03/26/what-s-new-in-spring-data-fowler
This setup will make sure that both your application package and the Spring Data JPA one for the JSR-310 converters will be scanned and handed to the persistence provider. Find a complete example for that in our Spring Data Examples repository. Note, that due to the fact that the converter simply converts the JSR-310 types to legacy Date instances, only non-time-zoned (e.g. LocalDateTime etc.) are supported.
我可以通过回退到使用 Joda DateTime 对象来解决这个问题。我必须执行以下操作:
- 将
compile('com.fasterxml.jackson.datatype:jackson-datatype-joda:2.6.3')
添加到 gradle.build 文件。 - 将
spring.jackson.serialization.write_dates_as_timestamps=false
添加到 application.properties 文件以使输出易于阅读。 import org.joda.time.DateTime;
并使用它代替 OffsetDateTime