美文网首页Java开发
Spring Boot 使用 @ControllerAdvice

Spring Boot 使用 @ControllerAdvice

作者: _浅墨_ | 来源:发表于2022-10-11 14:35 被阅读0次

在Spring 3.2中,新增了@ControllerAdvice、@RestControllerAdvice 注解,可以用于定义@ExceptionHandler、@InitBinder、@ModelAttribute,并应用到所有@RequestMapping、@PostMapping, @GetMapping注解中

此注解是一个增强的 Controller。使用这个 Controller 可实现三个方面的功能:

  1. 全局异常处理 (@ExceptionHandler)
    用于捕获Controller中抛出的不同类型的异常
  2. 全局数据绑定 (@InitBinder)
    用于请求中注册自定义参数的解析
  3. 全局数据预处理 (@ModelAttribute)
    此方法会在执行目标Controller方法之前执行

一个示例:

/**
 * ControllerAdvice本质上是一个Component,因此也会被当成组建扫描
 * ControllerAdvice 提供了多种指定Advice规则的定义方式,默认什么都不写,则是Advice所有Controller,当然你也可以通过下列的方式指定规则
 * 比如对于 String[] value() default {} , 写成@ControllerAdvice("org.my.pkg") 或者 @ControllerAdvice(basePackages="org.my.pkg"), 则匹配org.my.pkg包及其子包下的所有Controller,当然也可以用数组的形式指定,如:@ControllerAdvice(basePackages={"org.my.pkg", "org.my.other.pkg"}), 也可以通过指定注解来匹配,比如我自定了一个 @CustomAnnotation 注解,我想匹配所有被这个注解修饰的 Controller, 可以这么写:@ControllerAdvice(annotations={CustomAnnotation.class})
 *
 **/
@ControllerAdvice
public class ControllerExceptionHandler {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());


    /**
     * @description 异常处理 handler
     * @param request request
     * @param e 异常
     * @author chang
     * @date 2022/10/11 2:10 PM
     * @return
     **/
    @ExceptionHandler(Exception.class)
    public ModelAndView exceptionHandler(HttpServletRequest request, Exception e) throws Exception {
        logger.error("Requst URL : {},Exception : {}", request.getRequestURL(),e);

        /*
         * 这里 Exception.class 标注为拦截所有异常,只是如果有使用 ResponseStatus 注解的方法抛出的异常
         * 不进行跳转到错误页面,而是直接抛出异常
         */
        if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) {
            throw e;
        }

        ModelAndView mv = new ModelAndView();
        mv.addObject("url",request.getRequestURL());
        mv.addObject("exception", e);
        mv.setViewName("error/error");
        return mv;
    }
}

参考:

  1. 精通Spring Boot —— 第十五篇:使用@ControllerAdvice处理异常

相关文章

网友评论

    本文标题:Spring Boot 使用 @ControllerAdvice

    本文链接:https://www.haomeiwen.com/subject/lkxzartx.html