Spring Boot 2.6.1抛出ResponseStatusException无响应体问题排查
问题描述
我正在使用以下版本的Spring Boot:
id 'org.springframework.boot' version '2.6.1'
以下是抛出异常的代码片段:
catch(Exception e){ System.out.println(e.getLocalizedMessage()); throw new ResponseStatusException( HttpStatus.BAD_REQUEST, "something went wrong", e); }
但返回的400响应没有响应体,响应详情如下:
* upload completely sent off: 100 out of 100 bytes * Mark bundle as not supporting multiuse < HTTP/1.1 400 < Vary: Origin < Vary: Access-Control-Request-Method < Vary: Access-Control-Request-Headers < X-Content-Type-Options: nosniff < X-XSS-Protection: 1; mode=block < Cache-Control: no-cache, no-store, max-age=0, must-revalidate < Pragma: no-cache < Expires: 0 < X-Frame-Options: DENY < Content-Length: 0 < Date: Thu, 27 Oct 2022 14:43:38 GMT < Connection: close < * Closing connection 0
更新说明:已在application.properties中配置:
server.error.include-message=always
请问还遗漏了什么?
解决方案
在Spring Boot 2.6.x版本中,仅配置server.error.include-message=always不足以让ResponseStatusException返回带内容的响应体,需要补充以下配置项:
# 控制是否包含绑定错误信息,按需设置 server.error.include-binding-errors=always # 控制是否包含栈追踪,可选值:always/never/on_param server.error.include-stacktrace=never # 控制是否包含异常类名,可选true/false server.error.include-exception=false
另外需要排查:
- 项目中是否存在自定义的
@ControllerAdvice或ErrorController实现,这类自定义逻辑可能覆盖了Spring Boot默认的异常处理流程,导致响应体未被正确生成。如果有,需确保自定义处理器正确处理ResponseStatusException并将异常信息写入响应。 - 确认代码中抛出
ResponseStatusException的逻辑是否被正确执行,比如是否存在其他异常捕获逻辑提前拦截了异常。
内容的提问来源于stack exchange,提问作者Prasenjit
相关产品推荐
相关产品推荐

