下面是有问题的方法。
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可能是什么?