Spring中@ExceptionHandler用法及控制器抛出业务异常合规性咨询
问题解答
你当前的写法是完全合规的,更推荐直接在控制器层抛出异常交给全局异常处理器处理,不需要手动捕获返回对应ResponseEntity,理由如下:
- 符合职责分离的设计原则:
@ControllerAdvice的定位就是统一处理全项目的 controller 层异常,控制器只需要聚焦正常业务流程的返回逻辑,不需要冗余的try-catch代码,整体可读性更高。 - 减少重复代码:如果每个涉及用户查询的接口都单独捕获
UnknownUserException封装404返回,后续如果要调整这类异常的返回格式、日志打印逻辑、状态码,都需要逐个修改接口,维护成本很高。统一走全局异常处理器只需要修改一次逻辑即可全量生效。 - 你当前的代码逻辑本身是完全通顺的:业务层
findById方法抛出UnknownUserException后,不需要控制器做额外处理,全局异常处理器会自动匹配到对应的@ExceptionHandler方法,返回你定义的ErrorMessage结构并设置404状态码,完全满足需求。
只有一种场景建议你在控制器层单独捕获:该异常的处理逻辑仅对当前接口生效,其他接口抛出
UnknownUserException需要走不同的返回规则时,再单独处理即可。
内容的提问来源于stack exchange,提问作者FloranePlo
相关产品推荐
相关产品推荐

