SpringBoot升级至2.4.4后response.sendError无法返回自定义错误信息
问题根因
该现象是Spring Boot 2.3.0版本引入的默认配置变更导致的:为了避免错误信息意外泄露服务端敏感内容,server.error.include-message配置项的默认值从always调整为never,因此调用response.sendError(responseCode, "errorReason")后,Spring Boot默认的错误处理逻辑不会把你传入的errorReason返回到客户端响应中。
解决方案
可以根据业务场景选择以下任意一种方式修复:
- 方案一:修改全局配置,开启错误信息返回
在application.yml中添加如下配置:
若使用application.properties,对应配置为:server: error: include-message: always
注意:该配置为全局生效,开启后所有错误响应都会携带message字段,生产环境使用前请确认不会泄露敏感信息server.error.include-message=always - 方案二:直接写响应流,不依赖默认错误处理逻辑
替换response.sendError的写法,直接构造响应内容写入输出流,该方式不受全局错误配置影响:
这种方式更适合需要自定义鉴权异常返回格式的接口服务场景。response.setStatus(responseCode); response.setContentType(MediaType.APPLICATION_JSON_VALUE); response.getWriter().write("{\"error\":\"你需要返回的errorReason\"}"); response.getWriter().flush();
内容的提问来源于stack exchange,提问作者kushal agrawal
相关产品推荐
相关产品推荐

