Spring 2.0 findbugs nullable即使包装在null检查中也会引发错误

时间:2018-09-19 20:11:20

标签: spring spring-boot findbugs

我在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()
                    }

1 个答案:

答案 0 :(得分:0)

根据Spot bugs documentation发生这种情况的原因是:

'取消引用方法的返回值时不进行空检查,并且该方法的返回值通常应检查为空。执行代码时,这可能导致NullPointerException。'

通过以下方式修复了该问题:

Optional <T> body = Optional.ofNullable(response.getBody);
if (body.isPresent()) {
   //use body
}

您将收到警告,因为getBody方法已被注释为Nullable,并且spotBugs / findbugz希望在使用该值之前进行明确的null检查。对我来说很好。