You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Sonar代码异味:get()返回空可能引发空指针异常

修复Sonar检测的空指针异常代码异味问题

问题原因

Sonar提示的空指针风险出现在直接对request.getHeaders().get(HttpHeaders.CUSTOMER_ID.getName())调用.isEmpty()的代码行——如果get()方法返回null,后续调用.isEmpty()会直接抛出空指针异常。另外原代码中==nul是拼写错误,应为==null。

修复方案

方案1:提取变量(最直观的基础修复)

将get()的结果提取为局部变量,避免重复调用并安全判断null:

// 提取header值到变量,仅调用一次get()
String customerIdHeader = request.getHeaders().get(HttpHeaders.CUSTOMER_ID.getName());
// 先判断null,再判断空字符串,避免空指针
if (customerIdHeader == null || customerIdHeader.isEmpty()) {
    String customer_id = LogContext.getCustomerId();
    if (customer_id != null) {
        request.getHeaders().add(HttpHeaders.CUSTOMER_ID.getName(), customer_id);
    }
}

方案2:使用工具类简化判断(推荐)

如果项目依赖Apache Commons Lang或Spring Core,可以用工具类的isEmpty()方法,它会同时处理null和空字符串:

// 以Spring的StringUtils为例,Apache Commons的StringUtils用法一致
import org.springframework.util.StringUtils;

if (StringUtils.isEmpty(request.getHeaders().get(HttpHeaders.CUSTOMER_ID.getName()))) {
    String customer_id = LogContext.getCustomerId();
    if (customer_id != null) {
        request.getHeaders().add(HttpHeaders.CUSTOMER_ID.getName(), customer_id);
    }
}

方案3:Java 8+ Optional方式

用Optional包装可能为null的对象,通过链式调用安全判断:

Optional<String> customerIdHeader = Optional.ofNullable(request.getHeaders().get(HttpHeaders.CUSTOMER_ID.getName()));
if (!customerIdHeader.isPresent() || customerIdHeader.get().isEmpty()) {
    String customer_id = LogContext.getCustomerId();
    if (customer_id != null) {
        request.getHeaders().add(HttpHeaders.CUSTOMER_ID.getName(), customer_id);
    }
}

更简洁的写法:

if (Optional.ofNullable(request.getHeaders().get(HttpHeaders.CUSTOMER_ID.getName()))
        .map(String::isEmpty)
        .orElse(true)) {
    String customer_id = LogContext.getCustomerId();
    if (customer_id != null) {
        request.getHeaders().add(HttpHeaders.CUSTOMER_ID.getName(), customer_id);
    }
}

核心思路

所有方案的核心都是避免在可能为null的对象上直接调用实例方法,通过提取变量复用结果、工具类封装判断逻辑或Optional容器安全处理null值,同时修正原代码中的拼写错误。

内容的提问来源于stack exchange,提问作者Susil Ku Padhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 10:15:40