spring 2.0 findbugs nullable throws甚至在以null检查时包含错误

问题描述 投票:2回答:1

我对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()
                    }
spring spring-boot findbugs
1个回答
0
投票

Spot bugs documentation说,发生这种情况的原因是:

'方法的返回值在没有空检查的情况下被解引用,并且该方法的返回值通常应该检查为null。执行代码时,这可能会导致NullPointerException。

修复它:

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

您收到警告,因为getBody方法已注释为Nullable,而spotBugs / findbugz期望在使用该值之前进行显式的null检查。对我来说效果很好。

© www.soinside.com 2019 - 2024. All rights reserved.