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.抛出自定义异常

     

 

posted @ 2020-02-15 16:22  糖不甜,盐不咸  阅读(169)  评论(0)    收藏  举报