一、@ControllerAdvice注解的作用
从Spring 3.2开始,Spring 提供了一个新注解@ControllerAdvice, @ControllerAdvice有以下两个作用。
• 注解作用在类上时可以增强Controller,对Controller中被@RequestMapping注解标注的方法加一些逻辑处理。• @ControllerAdvice注解结合方法型注解@ExceptionHandler,可以捕获Controller中抛出的指定类型的异常,从而实现不同类型的异常统一处理。
接下来通过一个案例演示使用注解实现异常的分类处理,具体实现步骤如下所示。
1、创建名称为ExceptionAdvice的异常处理器。
ExceptionAdvice类中定义2个处理不同异常的方法,其中doMyException()方法用来处理Handler执行时抛出的自定义异常, doOtherException()方法用来处理Handler执行时抛出的系统异常。
import com.itheima.exception.MyException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;import java.io.IOException;@ControllerAdvice
public class ExceptionAdvice {//处理MyException类型的异常@ExceptionHandler(MyException.class)public ModelAndView doMyException(MyException ex) throws IOException {ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("msg", ex.getMessage());modelAndView.setViewName("error.jsp");return modelAndView;}//处理Exception类型的异常@ExceptionHandler(Exception.class)public ModelAndView doOtherException(Exception ex) throws IOException {ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("msg", "网络异常!");modelAndView.setViewName("error.jsp");return modelAndView;}
}
2、启动chapter13项目,在浏览器中访问地址http://localhost:8080/chapter13/showNullPointer,程序将执行showNullPointer()方法。
3、在浏览器中访问地址http://localhost:8080/chapter13/addData,程序将执行addData()方法。
从步骤2和步骤3所示的页面显示效果可以得出,使用@ControllerAdvice注解和@ExceptionHandler注解实现的异常分类处理,效果和上一节使用自定义异常处理器一样。