下面是正在讨论的方法。
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 来说还不够吗?
更新:向方法中添加了缺失但相关的代码。现在没有代码丢失。
很可能< code>rTempl.getForEntity的方法被显式声明为可能返回< code>null,然后您的代码只是取消引用< code>getForEntity提供给您的内容,而不进行任何检查。您的< code>requireNonNull代码检查< code>response.getBody()是否返回非null它不检查< code>response本身是否为非空。
代码仍然丢失。rTempl到底是什么?
奇怪的是,这就是解决办法,声纳很高兴。
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语句: