我对Findbugs抱怨弹簧HttpEntity.getBody()
有困难。
下面你会看到我打电话给response.getBody().length
,据我所知可能导致NPE。然而,当我把它包装在if (response.getBody() != null)
时,它仍然抱怨。它只在Spring 2.0(而不是1.5)中执行此操作,这似乎与添加到方法中的@Nullable
注释有关。
我可以得到一个解释为什么即使我把它包裹在一个空检查中,它仍然会在我得到它的长度时抱怨?
Bug类型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()
}
据Spot bugs documentation说,发生这种情况的原因是:
'方法的返回值在没有空检查的情况下被解引用,并且该方法的返回值通常应该检查为null。执行代码时,这可能会导致NullPointerException。
修复它:
Optional <T> body = Optional.ofNullable(response.getBody);
if (body.isPresent()) {
//use body
}
您收到警告,因为getBody方法已注释为Nullable,而spotBugs / findbugz期望在使用该值之前进行显式的null检查。对我来说效果很好。