如何解决声纳中这个"possible null pointer dereference"关键问题?



下面是有问题的方法。

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()还不够吗?

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

奇怪的是,这就是修复,Sonar很高兴。

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();
}

我仍然不明白这与我以前通过Objects.requireNonNull()的解决方案有何不同。

很可能rTempl.getForEntity的方法被明确声明为可能返回null,然后您的代码只引用getForEntity给您的内容,而不检查任何内容。您的requireNonNull代码检查response.getBody()是否返回非null;它不检查CCD_ 8本身是否为非空。

代码仍然缺失。rTempl可能是什么?

最新更新