Spring Boot缺失Content-type请求时自定义错误响应失效问题排查
问题根因
- 异常处理类错误继承了
ExceptionHandlerExceptionResolver
Spring Boot 2.5.6版本中,@ControllerAdvice注解本身就具备全局异常处理的能力,不需要额外继承ExceptionHandlerExceptionResolver。继承该类会打乱Spring默认的异常解析执行链路:你编写的异常处理逻辑虽然触发执行了,但执行完成后框架还会走默认的异常处理流程,最终返回默认的415响应,同时日志会输出ExceptionHandlerExceptionResolver执行失败的WARN级别日志。 - 自定义返回类可能存在序列化问题
你最初的实现中返回了自定义ErrorResponse对象,如果该类没有配置对应的JSON/XML序列化规则,会导致响应序列化失败,触发二次异常,最终也会走Spring默认的错误返回逻辑。
优化方案
你编辑后修改的代码已经去掉了extends ExceptionHandlerExceptionResolver的继承逻辑,完全符合Spring Boot 2.x全局异常处理的规范,所以可以正常返回自定义响应。如果要实现最初的返回500状态码+自定义ErrorResponse的需求,只需要调整返回逻辑即可:
return ResponseEntity .status(HttpStatus.INTERNAL_SERVER_ERROR) .body(errorResponse);
同时需要保证你的ErrorResponse类已经配置了正确的序列化注解,适配项目支持的JSON、XML两种响应格式。
内容的提问来源于stack exchange,提问作者jstack100
相关产品推荐
相关产品推荐

