当前位置: 首页 > 知识库问答 >
问题:

如何修复这个“可能的空指针取消引用”在声纳中的关键问题?

张唯
2023-03-14

下面是正在讨论的方法

public String getCarById(Integer carId) {
  ResponseEntity<CarString> response = rTempl.getForEntity(url, CarString.class,
        of("car-id", carId.toString()));
  log.debug("code: {}", response.getStatusCode());
  return Objects.requireNonNull(response.getBody()).getCarString();
}

完整的错误如下。

Possible null pointer dereference in <package>.CarRegistryClient.getCarById(Integer) due to return value of called method

使用 Objects.requireNonNull() 对于 Sonar 来说还不够吗?

更新:向方法中添加了缺失但相关的代码。现在没有代码丢失。

共有2个答案

华凯捷
2023-03-14

很可能< code>rTempl.getForEntity的方法被显式声明为可能返回< code>null,然后您的代码只是取消引用< code>getForEntity提供给您的内容,而不进行任何检查。您的< code>requireNonNull代码检查< code>response.getBody()是否返回非null它不检查< code>response本身是否为非空。

代码仍然丢失。rTempl到底是什么?

杜鸿彩
2023-03-14

奇怪的是,这就是解决办法,声纳很高兴。

public String getCarById(Integer carId) {
  ResponseEntity<CarString> response = rTempl.getForEntity(url, CarString.class,
        of("car-id", carId.toString()));

  CarString responseBody = response.getBody();
  assert responseBody != null

  log.debug("code: {}", response.getStatusCode());
  return response.getBody().getCarString();
}

通过<code>Objects.requirennull()</code>我仍然不知道这与我以前的解决方案有什么不同。

 类似资料:
  • 嗨我有以下方法: 不得不提的是,startDate和endDate是长变量。我尝试在if条件中添加null检查,也尝试使用longValue()方法,但没有结果。你知道我怎样才能解决这个问题吗?可能是fndBugs端的bug?

  • 此代码中可能存在空指针取消引用错误: 如何解决这些问题?

  • 我试图用以下代码指出声纳中的关键问题: 我也做了下面的更改,但仍然不起作用 请帮忙。

  • 我不能将Paramindex++移动到第一个for循环,因为行为将与所需的不同。 如果有人能就如何修复这种违规行为提出建议,我将不胜感激。提前谢谢你。

  • 我已经在我的sonar实例上测试了规则“正确性--可能的空指针取消引用”和“正确性--在异常路径的方法中可能的空指针取消引用”。不幸的是,以下代码从未被检测为错误 Netbeans能够正确检测到此问题,但sonar 3.6.1不能。 谢谢你的帮助

  • 我正试着数字符串中元音的数目。问题是它编译正确,但当我运行它时,命令窗口显示“countvowels.main(countvowels.java:25)处线程'main'java.lang.NullPointerException”。 是什么导致了这一点,我该如何修复它,我该如何防止它在未来再次发生? 第25行是我的if语句: