设置 null 而不出现 NullPointerException

if (request.getHeight() != null) {

   mechEquipment.setHeight(request.getHeight());

}


if (!ObjectUtils.isEmpty(request.getCargoBoxSize())) {

   mechEquipment.setCargoBoxSize(request.getCargoBoxSize());

}

我使用这样的子句来设置数据,但有时我需要将其设置为空。如果我删除 if 子句,并且没有更改该项目,则会出现空指针异常,因为它不在 PATCH 请求中。


我怎样才能改变这个?


目前我的权重设置为 300。如果我清除前端的输入并发送它,请求将为weight = null。但由于 IF 子句避免了这种情况,我不知道该怎么办。


慕尼黑5688855
浏览 134回答 4
4回答

喵喵时光机

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

繁星淼淼

您可以在请求中使用包装器对象,尽管它不是很干净。{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;"height":{&nbsp;"value":&nbsp;null&nbsp;},&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;"width":{&nbsp;"value":&nbsp;500&nbsp;}, }通过这种方式,您可以检查整体Height或Width对象是否存在,如果存在,则value无论它是否为 null 都可以应用它。就我个人而言,我宁愿保持请求正文干净,而是按照 Eyal 在他的回答中建议的那样做,但这可能是一个更容易实现的解决方案。

杨魅力

当您使用 POJO 时,您不知道该字段是作为 null 发送还是未发送。如果您需要此指示并希望实现 PATCH 端点,您可能需要使用 JSON 对象(您可以在其中检查密钥是否存在)。另一种选择是从 JSON 序列化到 POJO 并为每个字段包含一个布尔值指示,或者包含一组作为 POJO 的一部分包含在请求中的字段名称,但是您需要做一些工作才能反序列化器具有这种行为(除非已经有一个库可以处理这个问题,我没有看到类似的东西)

一只名叫tom的猫

您可以使用条件三元运算符,例如&nbsp;mechEquipment.setHeight(request&nbsp;==&nbsp;null&nbsp;?&nbsp;null&nbsp;:&nbsp;request.getHeight());它将检查请求是否为 null,然后设置 null,否则 getter 方法的输出
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java