zoukankan      html  css  js  c++  java
  • springboot + @ControllerAdvice + @ExceptionHandler 实现全局异常拦截

    1.目的:实现全局异常拦截,不用在controller在写try catch,使用代码看起来更加整洁

    2.不啰嗦直接上代码

    2.1首先我们创建一个异常捕获处理类(@RestControllerAdvice = @ControllerAdvice + @ResponseBody)

    @RestControllerAdvice
    @Slf4j
    public class GlobalExceptionHandler {

    /**
    * 处理 Exception 异常
    *
    * @parame
    * @param e 异常
    * @return
    */
    @ExceptionHandler(value = Exception.class)
    public ResponseEntity exceptionHandler(Exception e) {
    log.error("服务错误:", e);
    return ResponseEntity.fail(200, "服务出错");
    }

    /**
    * 处理 BusinessException 异常
    *
    * @param e
    * @param e 异常
    * @return
    */
    @ExceptionHandler(value = QDSException.class)
    public ResponseEntity businessExceptionHandler(QDSException e) {
    log.error("业务异常。code:" + e.getCode() + "msg:" + e.getMsg());
    return ResponseEntity.fail(e.getCode(), e.getMsg());
    }
    }
     

    2.2 扩展一下 @RestControllerAdvice还可以指定拦截哪些

     



    2.3创建一个异常返回的实体bean

    
    
    @Data
    public class ResponseEntity implements Serializable {
    private Integer code;
    private String msg;
    private Object data;

    public ResponseEntity() {
    }


    public ResponseEntity(Integer code, String msg, Object data) {
    this.code = code;
    this.msg = msg;
    this.data = data;
    }

    public ResponseEntity( String msg,Object data) {
    this.msg = msg;
    this.data = data;
    }
    public ResponseEntity( Integer code,String msg) {
    this.code = code;
    this.msg = msg;
    }

    public static ResponseEntity success(String msg,String data) {
    return SUCCESS(msg,data);
    }
    public static ResponseEntity fail(Integer code,String msg) {
    return FAIL(code,msg);
    }

    public static ResponseEntity SUCCESS(String msg,Object data) {
    return new ResponseEntity(msg,data);
    }
    public static ResponseEntity FAIL(Integer code,String msg) {
    return new ResponseEntity(code,msg);
    }
    }


    2.3创建一个自定义异常类

    @Data
    public class QDSException extends RuntimeException {
    private Integer code;
    private String msg;
    private Object data;

    public QDSException(String msg) {
    this.msg= msg;
    }
    public QDSException(Integer code,String msg) {
    this.code = code;
    this.msg= msg;
    }

    public QDSException(Integer code, String msg, Object data) {
    this.code = code;
    this.msg = msg;
    this.data = data;
    }
    }
     

    2.4 接下来我们postman测试一下就可以了

    @RestController
    public class MyController {

    @RequestMapping(value = "/test2")
    public ResponseEntity test2() {
    throw new QDSException(5005,"错误");
    }
    }

    2.5 如果我们抛出没有拦截的异常打印出堆栈信息

    
    
  • 相关阅读:
    Include Native *.so Library in APK With Android Studio
    listview
    随笔2
    const
    关于nginx配置gzip的相关说明
    关于gzip开启后压缩对比及相关性能
    webpack 打包性能优化
    关于pc端挂载移动端页面的问题
    vue-router 中的路径异步获取时导致的to报错问题
    关于cors及文件上传和下载在非开发环境导致的异常问题
  • 原文地址:https://www.cnblogs.com/bt2882/p/12916104.html
Copyright © 2011-2022 走看看