为了账号安全,请及时绑定邮箱和手机立即绑定

设置 null 而不出现 NullPointerException

设置 null 而不出现 NullPointerException

慕尼黑5688855 2023-06-21 13:16:01
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


查看完整回答
反对 回复 2023-06-21
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

您可以在请求中使用包装器对象,尽管它不是很干净。

{    
    "height":{ "value": null },    
    "width":{ "value": 500 },
}

通过这种方式,您可以检查整体HeightWidth对象是否存在,如果存在,则value无论它是否为 null 都可以应用它。

就我个人而言,我宁愿保持请求正文干净,而是按照 Eyal 在他的回答中建议的那样做,但这可能是一个更容易实现的解决方案。


查看完整回答
反对 回复 2023-06-21
?
杨魅力

TA贡献1811条经验 获得超5个赞

当您使用 POJO 时,您不知道该字段是作为 null 发送还是未发送。

如果您需要此指示并希望实现 PATCH 端点,您可能需要使用 JSON 对象(您可以在其中检查密钥是否存在)。

另一种选择是从 JSON 序列化到 POJO 并为每个字段包含一个布尔值指示,或者包含一组作为 POJO 的一部分包含在请求中的字段名称,但是您需要做一些工作才能反序列化器具有这种行为(除非已经有一个库可以处理这个问题,我没有看到类似的东西)


查看完整回答
反对 回复 2023-06-21
?
一只名叫tom的猫

TA贡献1906条经验 获得超2个赞

您可以使用条件三元运算符,例如

 mechEquipment.setHeight(request == null ? null : request.getHeight());

它将检查请求是否为 null,然后设置 null,否则 getter 方法的输出


查看完整回答
反对 回复 2023-06-21
  • 4 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信