4

Spring Common Data 2.1.2(和 Data MongoDB 2.1.2)无法反序列化我班级中的 Optional 字段。它适用于以前的版本(2.0.8),现在我的对象保存在数据库中(使用 MongoRepository.save),但是当我尝试读取它时出现异常(MongoRepository.findById)。我已经缩小了一个确切的领域,问题在于存储可选:

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)。

我找不到有关更改的行为/对 Optionals 等的不同处理的任何信息。

如何解决?

我应该保持它

private Double altitude;

与吸气剂:

public Optional<Double> getAltitude() {
    return Optional.ofNullable(altitude);
}

或任何其他方式?

4

0 回答 0