我在Findbugs抱怨弹簧HttpEntity.getBody()
方面遇到困难。
在下面,您会看到我打了response.getBody().length
,我知道这可能会导致NPE。但是,当我将其包装在if (response.getBody() != null)
中时,它仍然会抱怨。它仅在Spring 2.0(而非1.5)中才执行此操作,而后者似乎与添加到方法中的@Nullable
注释有关。
我可以得到一个解释,为什么即使我将其包装在null支票中,当我得到它的长度时,它仍然会抱怨吗?
错误类型NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE
ResponseEntity<SomeClass[]> response = restTemplate.exchange(someUrl, HttpMethod.GET, httpEntity,
SomeClass[].class);
for (int i = 0; response.getBody().length > i; i++) {
doSomething()
}
答案 0 :(得分:0)
根据Spot bugs documentation发生这种情况的原因是:
'取消引用方法的返回值时不进行空检查,并且该方法的返回值通常应检查为空。执行代码时,这可能导致NullPointerException。'
通过以下方式修复了该问题:
Optional <T> body = Optional.ofNullable(response.getBody);
if (body.isPresent()) {
//use body
}
您将收到警告,因为getBody方法已被注释为Nullable,并且spotBugs / findbugz希望在使用该值之前进行明确的null检查。对我来说很好。