一、简介
请求过来时先经过前端控制器,前端控制器将请求交给Controller,Controller 调用Service,Service调用Dao,当Dao处理完请求之后,将处理结果返回给Service,Service再将返回结果返回给Controller,Controller再将返回结果返回给前端控制器。同理,如果出现异常,最终都会传到前端控制器。我们便在前端控制器对异常进行统一处理
通常情况下我们用try…catch… 对异常进行捕捉处理,可是在实际项目中随时的进行异常捕捉,会造成代码重复和繁杂,我们希望代码中只有业务相关的操作,所有的异常我们单独设立一个类来处理它。
首先,我们在可能发生异常的方法,全部throw出来,即dao抛给service、service给controller、controller抛给前端控制器;
然后由前端控制器调用 全局异常处理器 对异常进行统一处理。
二、流程
@ControlerAdvice 用来处理全局数据,是@Controller 的增强版。全局异常处理也可以使用该注解配合@ExceptionHandler 使用。
1.GlobalExceptionHandler.java 处理全局异常
package com.vincent;
import java.util.Arrays;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler
public void exceptionHandler(Exception ex) {
System.out.println(Arrays.toString(ex.getStackTrace()));
}
}
应用在遇到异常时将会调用该异常处理方法,该方法是前端控制器(DispatcherServlet) 调用,故可以返回json 数据、ModelAndView,使用HttpServletRequest、HttpServletResponse 作为方法参数。