Spring Common Data 2.1.2 MongoDB无法反序列化可选值

时间:2018-11-20 14:28:35

标签: java spring spring-data-mongodb spring-data-commons

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);
}

或其他任何方式?

0 个答案:

没有答案