if (request.getHeight() != null) { mechEquipment.setHeight(request.getHeight());}if (!ObjectUtils.isEmpty(request.getCargoBoxSize())) { mechEquipment.setCargoBoxSize(request.getCargoBoxSize());}我使用这样的子句来设置数据,但有时我需要将其设置为空。如果我删除 if 子句,并且没有更改该项目,则会出现空指针异常,因为它不在 PATCH 请求中。我怎样才能改变这个?目前我的权重设置为 300。如果我清除前端的输入并发送它,请求将为weight = null。但由于 IF 子句避免了这种情况,我不知道该怎么办。
4 回答
喵喵时光机
TA贡献1846条经验 获得超7个赞
Java-8 提供Optional类:该类的目的是提供一种类型级别的解决方案,用于表示可选值以及空值而不是空引用。
目前我的权重设置为 300。如果我清除前端的输入并发送,请求将为
weight = null
. 但是由于 IF 子句避免了这种情况,我不知道该怎么办。
您可以创建如下权重:
Optional<Integer> weight = Optional.ofNullable(null); //can take weight as null also Optional<Integer> weight = Optional.of(100); // will take any values except null
繁星淼淼
TA贡献1775条经验 获得超11个赞
您可以在请求中使用包装器对象,尽管它不是很干净。
{ "height":{ "value": null }, "width":{ "value": 500 }, }
通过这种方式,您可以检查整体Height
或Width
对象是否存在,如果存在,则value
无论它是否为 null 都可以应用它。
就我个人而言,我宁愿保持请求正文干净,而是按照 Eyal 在他的回答中建议的那样做,但这可能是一个更容易实现的解决方案。
杨魅力
TA贡献1811条经验 获得超6个赞
当您使用 POJO 时,您不知道该字段是作为 null 发送还是未发送。
如果您需要此指示并希望实现 PATCH 端点,您可能需要使用 JSON 对象(您可以在其中检查密钥是否存在)。
另一种选择是从 JSON 序列化到 POJO 并为每个字段包含一个布尔值指示,或者包含一组作为 POJO 的一部分包含在请求中的字段名称,但是您需要做一些工作才能反序列化器具有这种行为(除非已经有一个库可以处理这个问题,我没有看到类似的东西)
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
您可以使用条件三元运算符,例如
mechEquipment.setHeight(request == null ? null : request.getHeight());
它将检查请求是否为 null,然后设置 null,否则 getter 方法的输出
添加回答
举报
0/150
提交
取消