springboot中的全局异常处理机制,以下方法针对controller抛出的异常进行拦截处理。
1.使用全局异常处理器需要注意的点,首先是@controllerAdvice注解,类似于aop,可配置需要进行拦截处理的controller所在的包,配置完毕类中可定义多个方法用于处理不同的异常,使用@ExceptionHandler(value = Exception.class)即可设置处理不同的异常。
2.测试过程中发现如果方法中掺杂了其他参数,则controller出现异常也不会截获。
3.如果不定义任何异常处理机制,包括静态错误页面配置,则springboot默认使用默认的白板页面,如果需要自定义错误页面可以在资源包根路径下建立error.html,或在资源包下/error/路径下建立相应的404.html或500.html用于处理不同的异常。
package com.example.springboot.controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
/**
* Created by Smile_Mylife on 2018/12/11.
*/
@ControllerAdvice(basePackages = "com.example.springboot.controller")
public class ExceptionHandleController {
/**
* @controllerAdvice并不会被当成controller来进行处理,而且接收参数只能是exception和request
* 当相应的异常处理机制处理完相应的异常之后,可返回json信息,也可以跳转至相应的视图层,返回modelAndView即可。
* 异常处理机制,可返回视图层或者数据,当返回视图层时使用如下方法,当返回数据时使用responsebody
* @param e
* @return
*/
@ExceptionHandler(value = Exception.class)
public ModelAndView handleException(HttpServletRequest request, Exception e) {
System.out.println("程序发生异常,异常原因:" + e.toString());
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/error/comError");
modelAndView.addObject("errorDesc", e.toString());
return modelAndView;
}
//TODO 测试能否针对特定的异常进行处理
}