当前位置: 首页 > 知识库问答 >
问题:

Sonarqube显示NullPointerException错误,即使在Java中存在null检查之后

陶烨赫
2023-03-14

Sonarqube说这段代码中有两个主要错误,在if条件下的第二条语句中。

第一:

可以抛出“NullPointerException”;“getResponseHeaders()”可以返回null。

第二个:

取消引用“get响应头()”的结果

private ResponseEntity<ErrorResponse> handleHttpStatusCodeException(HttpStatusCodeException exception) {
    ResponseEntity.BodyBuilder response = ResponseEntity.status(exception.getStatusCode());
    if (exception.getResponseHeaders() != null && exception.getResponseHeaders().getContentType() != null) {
        response.contentType(exception.getResponseHeaders().getContentType());
    }
    return response.body(createErrorResponse(exception.getResponseBodyAsString()));
}

有没有办法,我可以更改代码来避免这个bug?

共有1个答案

冯浩旷
2023-03-14

理论上,另一个线程可能会更改异常的结果。getResponseHeaders()在您检查它是否为非null之后,但在您再次调用它之前。这种检查然后行动并不总是安全的。

处理此问题的更安全方法是将

var headers = exception.getResponseHeaders();
if (headers != null) {
    var contentType = headers.getContentType();
    if (contentType != null) {
        response.contentType(contentType);
    } 
}

我认为这比你的解决方案更具可读性。

当然,如果您的对象没有被多个线程变异或不可变,那么此警告是误报,可以忽略。

 类似资料:
  • 日志cat显示以下错误。 06-07 03:12:49.829 29544-29544/com。实例阿默。奥兰加巴德带系统。组织。json。JSONException:组织中的total没有值。json。JSONObject。在org上获取(JSONObject.java:389)。json。JSONObject。com上的getString(JSONObject.java:550)。实例阿默。奥

  • 在为存储过程赋值时,调用的Nullcheck的SonarQube中有一个错误。 正是在上述摘录中。如果去掉三元数,他也会犯同样的错误。我在函数之前做了一个IF,同样的错误也发生了。 在此输入图像描述

  • 这是Kotlin的bug,还是和Android Studio有关?

  • 问题内容: 所以我有这张表 现在,如果我查询 我期待类似的东西 是否有可能 ? PS:C行中的内容仅表示该列为空。 问题答案: 您可以创建一个嵌套表架构对象类型: 然后按以下方式构造查询: 例子: 结果:

  • 如何预防 Java 中著名的 NullPointerException 异常?这是每个 Java 初学者迟早会问到的关键问题之一。而且中级和高级程序员也在时时刻刻规避这个错误。其是迄今为止 Java 以及很多其他编程语言中最流行的一种错误。 Null 引用的发明者 Tony Hoare 在 2009 年道歉,并称这种错误为他的十亿美元错误。 我将其称之为自己的十亿美元错误。它的发明是在1965 年

  • 一个web服务返回一个巨大的XML,我需要访问它的深度嵌套字段。例如: 问题是、、都可能返回。 但是,如果我在所有情况下都检查,那么代码就会变得非常冗长,很难阅读。此外,我可能会错过一些字段的支票。 可以写吗 或者这会被认为是反模式吗?