SpringBoot全局异常处理
任何项目发生异常是不可避免的,使用全局异常捕获发生的异常是十分必要的。SpringBoot框架对全局异常捕获提供了很好的支持,并且操作非常简单。我们只需要创建一个类和一个方法,并添加两个注解:@ControllerAdvice和@ExceptionHandler即可,如:
1 package com.sqy.start.controller;
2
3 import org.springframework.web.bind.annotation.ControllerAdvice;
4 import org.springframework.web.bind.annotation.ExceptionHandler;
5 import org.springframework.web.bind.annotation.ResponseBody;
6
7 @ControllerAdvice//还可以指定具体的捕获包
8 public class GlobalExceptionHandler {
9 @ExceptionHandler(RuntimeException.class) //捕获所有运行时异常
10 @ResponseBody
11 public String exceptionHandler(){
12 return "error";
13 }
14 }
测试:
在controller层添加代码,如:
1 @RequestMapping("/parseInt")
2 @ResponseBody
3 public int parseInt(String num) {
4 int a = Integer.parseInt(num);
5 return a;
6 }
运行效果:
其中,@ControllerAdvice:该注解是spring2.3以后新增的一个注解,主要是用来Controller的一些公共的需求的低侵入性增强提供辅助,作用于@RequestMapping标注的方法上。@ExceptionHandler:该注解是配@ControllerAdvice一起使用的注解,自定义错误处理器,可自己组装json字符串,并返回到页面。
注意:如果想实现,不同的异常有不同的操作的话,只需要将 @ExceptionHandler的value的值不一样就可以了,可以同时实现多个不同的异常处理,但不能出现包含状态。
由此可见,全局异常捕获的原理是: 使用AOP技术,采用异常通知的方式处理。
AOP面向切面:无侵入,删除代码也对其他代码没有影响。