Spring Common Data 2.1.2(和Data MongoDB 2.1.2)无法从我的课程中反序列化Optional字段。 它与以前的版本(2.0.8)兼容,现在我的对象保存在DB中(使用MongoRepository.save), 但是当我尝试读取它时(MongoRepository.findById)有一个例外。 我缩小了确切的字段范围,问题出在存储Optional:
java.lang.UnsupportedOperationException: Cannot set immutable property java.util.Optional.value!
at org.springframework.data.mapping.model.BeanWrapper.setProperty(BeanWrapper.java:86) ~[spring-data-commons-2.1.2.RELEASE.jar:2.1.2.RELEASE]
at org.springframework.data.mapping.model.ConvertingPropertyAccessor.setProperty(ConvertingPropertyAccessor.java:61) ~[spring-data-commons-2.1.2.RELEASE.jar:2.1.2.RELE
和我的班级:
公共类坐标{ 私人双重纬度; 私人双经; 私人可选高度; }
当DB中的数据采用以下形式时,会有一个例外:
altitude: Object
value: 0
当海拔高度没有“值”时也没有错误
altitude: Object
(无值)
它与以前的Spring Boot版本(和Spring Data Commons / Mongodb 2.0.8)一起使用。
我找不到有关行为更改/对Optional等的不同处理的任何信息。
如何解决?
我应该保持它为
private Double altitude;
使用吸气剂:
public Optional<Double> getAltitude() {
return Optional.ofNullable(altitude);
}
或其他任何方式?