干掉 try catch !
Spring在3.2版本增加了一个注解@ControllerAdvice,可以与@ExceptionHan
dler、@InitBinder、@ModelAttribute
等注解注解配套使用,对于这几个注解的作用,这里不做过多赘述,若有不
了解的,可以参考Spring3.2新注解@ControllerAdvice,先大概有个了解。
不过跟异常处理相关的只有注解@ExceptionHandler,从字面上看,就是
异常处理器
的意思,其实际作用也是:若在某个Controller类定义一个异常处理方法,
并在方法上添加该注解,那么当出现指定的异常时,会执行该处理异常的方
法,其可以使用springmvc提供的数据绑定,比如注入HttpServletRequest等
,还可以接受一个当前抛出的Throwable对象。
但是,这样一来,就必须在每一个Controller类都定义一套这样的异常处理
方法,因为异常可以是各种各样。这样一来,就会造成大量的冗余代码,而
且若需要新增一种异常的处理逻辑,就必须修改所有Controller类了,很不
优雅。
当然你可能会说,那就定义个类似BaseController的基类,这样总行了吧。
这种做法虽然没错,但仍不尽善尽美,因为这样的代码有一定的侵入性和耦
合性。简简单单的Controller,我为啥非得继承这样一个类呢,万一已经继
承其他基类了呢。大家都知道Java只能继承一个类。
那有没有一种方案,既不需要跟Controller耦合,也可以将定义的
异常处理器
应用到所有控制器呢?所以注解@ControllerAdvice出现了,简单的说,该注