zoukankan      html  css  js  c++  java
  • springMVC中的异常处理

    系统中异常包括两类:预期异常和运行时异常 RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。
    系统的 dao、service、controller 出现异常都通过 throws Exception 向上抛出,最后由 springmvc 前端控制器交由异常处理器进行异常处理
      

     实现步骤:

      1.编写异常类

    /**
     * 自定义异常类型
     */
    public class CustomException extends RuntimeException {
        private ResultCode resultCode; // 自定义的错误代码
    
        public CustomException(ResultCode resultCode) {
            this.resultCode = resultCode;
        }
    
        public ResultCode getResultCode() {
            return resultCode;
        }
    }

      2.定义异常抛出类,方便调用,不用每次都手动new一个异常

    /**
     * 异常抛出类
     */
    public class ExceptionCast {
        public static void cast(ResultCode resultCode) {
            throw new CustomException(resultCode);
        }
    }

      3.自定义统一异常捕获类,可以扩展捕获更多异常

    /**
     * 统一异常捕获类
     */
    @ControllerAdvice // 控制器增强
    public class ExceptionCatch  {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(ExceptionCatch.class);
    
        // 捕获CustomException此类异常
        @ExceptionHandler(CustomException.class)
        @ResponseBody // 响应json数据给客户端
        public ResponseResult customException(CustomException ce) {
            // 记录日志
            LOGGER.error("catch exception: {}", ce.getMessage());
            ResultCode resultCode = ce.getResultCode();
            // ResponseResult 自定义的返回错误信息类
            return new ResponseResult(resultCode);
        }
    
        // 捕获Exception此类异常
        @ExceptionHandler(Exception.class)
        @ResponseBody
        public ResponseResult exception(Exception e) {
            // 记录日志
            LOGGER.error("catch exception: {}", e.getMessage());
            // CommonCode:自定义的通用错误代码和自定义错误代码ResultCode具有相同的作用
            return new ResponseResult(CommonCode.SERVER_ERROR);
        }
    }

      4.抛出自定义异常

         

  • 相关阅读:
    第四次作业
    第三次
    第十次作业
    第九次作业
    第八次作业
    10.29第七次
    15
    14
    13 this
    12 电视机
  • 原文地址:https://www.cnblogs.com/roadlandscape/p/12312488.html
Copyright © 2011-2022 走看看