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

Spring Boot3升级后HttpStatus转HttpStatusCode的正确判断方式

Spring Boot 3升级后HttpStatus与HttpStatusCode判断的正确方式

问题场景

Spring Boot 2升级到3后,原有基于HttpStatus的判断代码出现类型不匹配错误(Required type: HttpStatus,Provided: HttpStatusCode),相关代码如下:

原Spring Boot 2代码

import org.springframework.http.HttpStatus;
HttpStatus statusCode;

if (statusCode == HttpStatus.BAD_REQUEST){
    // 业务逻辑
}

升级后的尝试代码

import org.springframework.http.HttpStatusCode;

HttpStatusCode statusCode;
if (statusCode == HttpStatusCode.valueOf(400)){
    // 业务逻辑
}

正确实现方式

方式1:利用HttpStatus枚举匹配(推荐)

HttpStatus是HttpStatusCode的子类,推荐使用以下两种可靠方式:

  • equals方法匹配:兼容所有HttpStatusCode的实现类,无需担心实例类型
    import org.springframework.http.HttpStatusCode;
    import org.springframework.http.HttpStatus;
    
    HttpStatusCode statusCode;
    
    if (HttpStatus.BAD_REQUEST.equals(statusCode)) {
        // 执行业务逻辑
    }
    
  • 强转后用==匹配:如果能确定statusCode实际是HttpStatus枚举实例,可强转后用==(枚举的==是引用比较,性能略优)
    import org.springframework.http.HttpStatusCode;
    import org.springframework.http.HttpStatus;
    
    HttpStatusCode statusCode;
    
    if (statusCode instanceof HttpStatus && (HttpStatus) statusCode == HttpStatus.BAD_REQUEST) {
        // 执行业务逻辑
    }
    

方式2:通过状态码数值判断

如果只关注状态码的数值,可直接获取数值后比较:

import org.springframework.http.HttpStatusCode;

HttpStatusCode statusCode;

if (statusCode.value() == 400) {
    // 执行业务逻辑
}

不推荐的方式说明

不要直接用HttpStatusCode.valueOf(400)和==比较,因为HttpStatusCode.valueOf(400)返回的是通用HttpStatusCode实例,而业务中拿到的statusCode大概率是HttpStatus枚举对象,二者是不同实例,==比较会返回false,导致判断逻辑失效。

内容的提问来源于stack exchange,提问作者Peter Penzov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:35:02