当前位置:首页 >> 技术栈专业化分层 >> 【Spring AOP】统一异常处理,hmz-t3w

【Spring AOP】统一异常处理,hmz-t3w

cpugpu芯片开发光刻机 技术栈专业化分层 1
文件名:【Spring AOP】统一异常处理,hmz-t3w 【Spring AOP】统一异常处理

统一异常处理

统⼀异常处理使⽤的是 @ControllerAdvice + @ExceptionHandler 来实现的,

类上面加上 @ControllerAdvice 注解表示控制器通知类方法上面加上 @ExceptionHandler 表示异常处理器,并添加异常返回的业务代码

两个结合表示当出现异常的时候执⾏某个通知,也就是执⾏某个⽅法事件,具体实现代码如下:

@ControllerAdvice // 表示针对 Controller 的通知类public class MyExceptionAdvice {// 依靠这个注解, 当出现异常时, 我们就能拿到这个异常@ExceptionHandler(Exception.class) // 括号里面是要匹配的异常的类型,表示针对哪种异常的统一处理,如果出现的异常不匹配则拦截不到。@ResponseBody // 表示返回的不是静态页面public Object handler(Exception e) {HashMap<String, Object> map = new HashMap<>();map.put("state", -1);map.put("data", null);map.put("msg", e.getMessage());return map;}}

⽅法名和返回值可以⾃定义,其中最重要的是 @ControllerAdvice 和 @ExceptionHandler(Exception.class) 注解。 @ControllerAdvice + @ResponseBody 可以等价替换为 @RestControllerAdvice

以上⽅法表示,如果出现了异常就返回给前端⼀个 HashMap 的对象。

我们可以针对不同的异常,返回不同的结果:

@RestControllerAdvicepublic class MyExceptionAdvice {@ExceptionHandler(Exception.class) // 能接收所有的异常public Object exceptionAdvice(Exception e) {HashMap<String, Object> result = new HashMap<>();result.put("state", -1);result.put("message", "总的异常信息:" + e.getMessage());result.put("data", null);return result;}@ExceptionHandler(NullPointerException.class) // 只能接收空指针异常public Object nullPointerExceptionAdvice(NullPointerException e) {HashMap<String, Object> result = new HashMap<>();result.put("state", -1);result.put("message", "空指针异常:" + e.getMessage());result.put("data", null);return result;}}

当有多个异常通知时,匹配顺序为当前类 -> 当前类的父类 -> 父类的父类。

比如上述代码出现空指针异常时,虽然上面两个都可以接收 NullPointerException 异常, 但是会优先匹配上 nullPointerExceptionAdvice 这个方法,而不是 exceptionAdvice。

注意:如果你把异常给 catch 的话,就拦截不到了,并且 catch 之后会影响事务的回滚,所以 Spring Boot 中 try catch 不是想加就加的。

好啦! 以上就是对 统一异常处理 的讲解,希望能帮到你 ! 评论区欢迎指正 !

协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接