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

Axios的statusText始终为空,无法获取Spring Boot抛出的RuntimeException异常信息

问题根源

  • 协议层面:HTTP/2 标准已完全移除响应状态描述(statusText)字段,所有兼容HTTP/2的服务端、浏览器都会默认返回空字符串,属于协议层面的限制,和框架无关。
  • Spring Boot 配置层面:从2.3版本开始,server.error.include-message 配置项默认值为 never,即默认不会将异常的自定义消息填充到响应内容中。
  • @ResponseStatus 注解的作用仅是指定异常对应的响应状态码,不会自动将异常消息写入statusText或响应体。

解决方案

推荐方案:使用结构化响应体传递错误信息(兼容性最好,符合REST规范)

该方案不受HTTP协议版本限制,是目前业界通用的错误返回方式:

  1. 新增全局异常处理器,统一捕获自定义异常并返回结构化错误信息
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(BadRequestException.class)
    public ResponseEntity<Map<String, Object>> handleBadRequestException(BadRequestException e) {
        Map<String, Object> errorResult = new HashMap<>();
        errorResult.put("code", HttpStatus.BAD_REQUEST.value());
        errorResult.put("message", e.getMessage());
        return new ResponseEntity<>(errorResult, HttpStatus.BAD_REQUEST);
    }
}
  1. Axios 侧直接从响应体中读取错误信息即可
.catch((error) => {
    // 自定义错误消息可直接从响应体的message字段获取
    console.log(error.response.data.message)
})

兼容方案:强制从statusText获取(不推荐,仅适用于HTTP/1.1场景)

如果必须依赖statusText传递消息,需要做两处调整:

  1. 在Spring Boot配置文件application.properties中开启异常消息返回:
# 开启异常消息返回
server.error.include-message=always
# 服务端强制使用HTTP/1.1协议(HTTP/2下statusText必然为空)
server.http2.enabled=false
  1. 异常类的@ResponseStatus注解补充reason属性:
@ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "自定义错误")
public class BadRequestException extends RuntimeException {
    public BadRequestException(String message) {
        super(message);
    }
}

补充说明

fetch能拿到消息的核心原因是测试场景下默认走了HTTP/1.1协议,且未触发Spring Boot的消息屏蔽规则,Axios本身不会过滤statusText字段,无返回的核心原因是服务端未传递或协议不支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:27:04