• SpringBoot全局异常处理


    一、try/catch异常处理的缺陷

    在开发SpringBoot应用时,往往会遇到以下情景:在某个接口中,存在一些可能的异常。比如url参数错误、用户账号和密码错误等。这时我们可以在发生异常的地方抛出我们自定义的异常,并对异常进行处理,就像下面这样:

      @RequestMapping("/test")
        public BosCommonResponse test() {
            try {
                //业务代码
                throw new BadRequestParameterException();
            }catch(BadRequestParameterException e) {
                //异常处理
            }
            return new BosCommonResponse();
        }

    然而,这么做的问题是,对于每一种异常,我们都需要编写try/catch语句进行处理。代码因此变的冗长,而且一旦需要修改某种异常,则所有使用了该异常的接口都需要修改。

    二、引入全局异常处理

    为了解决这一问题,Spring3.2中新增了@ControllerAdvice注解,可以通过该注解配置一个全局异常处理类,它能统一处理Controller中抛出的异常而不需要书写try/catch语句。

    三、全局异常处理的使用

    1、自定义异常类

    public class BadRequestParameterException extends RuntimeException {
        public BadRequestParameterException() {
            
        }
        public BadRequestParameterException(String msg) {
            super(msg);
        }
    }

    注意:自定义异常类必须继承自RuntimeException才可以

    2、配置全局异常处理类

    @ControllerAdvice
    public class GlobalExceptionHandler {
        /**
         * 处理BadRequestParameterException异常
         * */
        @ExceptionHandler(value = BadRequestParameterException.class)
        public BosCommonResponse badRequestParameterException(HttpServletRequest req, BadRequestParameterException e) {
            return new BosCommonResponse();
        }
    }

    3、Controller中遇到异常直接抛出即可

    throw new BadRequestParameterException()
  • 相关阅读:
    s4-9 二层设备
    s4-9 二层设备
    s5-1 网络层引言
    LeetCode Factorial Trailing Zeroes (阶乘后缀零)
    UVA 658 It's not a Bug, it's a Feature! (最短路,经典)
    UVA 1151 Buy or Build (MST最小生成树,kruscal,变形)
    LeetCode Reverse Linked List (反置链表)
    LeetCode Contains Duplicate (判断重复元素)
    UVA 1395 Slim Span (最小生成树,MST,kruscal)
    割点,桥,边双连通分量,点双连通分量
  • 原文地址:https://www.cnblogs.com/SChenqi/p/10518468.html
Copyright © 2020-2023  润新知