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);
}
或任何其他方式?