知识卡片
异常处理的多层粒度选择
内容
Spring对异常处理提供了从窄到宽四种粒度可选:@ExceptionHandler只作用于当前Controller类内;HandlerExceptionResolver作为一个公共接口,可以在应用级别统一解析任意来源的异常;@ControllerAdvice则是把@ExceptionHandler的作用范围从单类扩展到全局,让”局部处理器”具备”全局处理器”的效果;ResponseStatusException用于只想给个别接口临时指定状态码和错误信息、不值得为此新增一个处理类的场景。发散:这四种方案不是互相替代关系,而是对应不同的”影响面”——选型的关键问题始终是”这段异常处理逻辑该在多大范围内生效”,范围越大越该往上层收敛,避免同样的处理逻辑在多处重复。
参考来源
《Spring Boot应用开发实战》第3章《创建RESTful Web服务》