关于springboot中的异常拦截器

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 测试能否针对特定的异常进行处理
}

你可能感兴趣的:(关于springboot中的异常拦截器)