在@restcontrolleradvice类中用@exceptionhandler标注方法可精准拦截对应异常,支持继承匹配、多异常声明及参数注入,按异常具体程度优先匹配,推荐返回统一result结构并设http状态码。

直接在 @RestControllerAdvice 类里,用 @ExceptionHandler 标注方法,并把要捕获的异常类型作为参数写进去,就能精准拦截对应异常。
指定异常类,一对一处理
每个 @ExceptionHandler 方法只负责一种(或一类)异常。Spring 会自动匹配抛出的异常实例是否属于该类型或其子类。
- 写法示例:
@ExceptionHandler(NullPointerException.class)—— 只捕获空指针异常 - 支持继承关系:若抛出
IllegalArgumentException,@ExceptionHandler(RuntimeException.class)也能捕获 - 可同时声明多个异常:
@ExceptionHandler({IOException.class, SQLException.class})
方法签名要匹配异常参数
被标注的方法第一个参数必须是你要捕获的异常类型(或其父类),否则 Spring 不会注入。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 正确写法:
public Result handleNPE(NullPointerException e) - 错误写法:
public Result handleNPE(Exception e)(虽然能运行,但失去精准性,建议避免) - 可额外加其他参数,如
HttpServletRequest、@RequestBody对象等,Spring 会自动注入
按优先级顺序匹配,避免兜底过早
Spring 按方法声明顺序查找,但更关键的是按异常类型的**具体程度**匹配:越具体的异常优先级越高。
- 先写
@ExceptionHandler(UserNotFoundException.class) - 再写
@ExceptionHandler(RuntimeException.class) - 最后写
@ExceptionHandler(Exception.class)作为兜底 - 如果把
Exception.class放最前,后面所有特定异常方法都失效
返回值保持统一结构
推荐返回项目已定义的 Result<t></t> 或 ResponseEntity<errorresponse></errorresponse>,和正常接口格式一致。
- 例如:
return Result.error(400, "用户不存在"); - 配合
@ResponseStatus(HttpStatus.BAD_REQUEST)可显式设置 HTTP 状态码 - 不建议返回字符串或 ModelAndView(除非是传统页面跳转场景)










