Java实站系列之全局异常处理

         或许你会很好奇,项目中的异常都是怎么统一处理的?下面我来说说,首先给大家介绍一个注解@ExceptionHandler,用来指明异常的处理类型,如果指定为NullPointException,那么数组越界异常不会进入到这个方法中。@ExceptionHandler可以接受请求处理方法抛出的异常,放在controller里的时候,只对当前的控制器有效。如果项目里有很多的controller控制器,怎么办呢?Spring提供了一个@ControllerAdvice注解,可以应用到所有的控制器上。将所有标记@ExceptionHandler的方法提取出来,放到一个类里,并加上@ControllerAdvice,所有的控制器都可以使用,起到了统一控制全局异常的作用。

定义一个全局的异常处理器,步骤如下:

1、定义一个全局处理器GlobalExceptionHandler 2、添加注@ControllerAdvice

在这个类里可以定义多个方法,不同的方法处理不同的异常。

Java实站系列之全局异常处理_第1张图片

3、编写一个自定义异常MyException

Java实站系列之全局异常处理_第2张图片

4、在GlobalExceptionHandler在resolveMyException的方法上添加@ExceptionHandler(MyException.class),指明处理这种异常。

5、编写一个Controller进行测试

Java实站系列之全局异常处理_第3张图片

Java实站系列之全局异常处理_第4张图片

在浏览器上进行测试,结果如下:

Java实站系列之全局异常处理_第5张图片

我们来看下@CcontrollerAdvice注解的源码,如下:

Java实站系列之全局异常处理_第6张图片

@ControllerAdvice注解被@Component注解标记,因此是可以被Spring注入。

如果我们只想对一部分的控制器起作用,还可以使用basePackageClasses、

assignableTypes、annotations等进行调整控制的范围。

Java实站系列之全局异常处理_第7张图片

@ControllerAdvice除了这个全局异常处理的功能外,还可以实现全局数据绑定和全局数据预处理,分别是@ModelAttribute和@InitBinder,大家自行研究。

你可能感兴趣的:(Java基础,java)