• springboot统一处理异常(二)


    有时候在项目中我们需要调用别人的接口,当上游接口挂掉或者其他异常的时候,我们希望展示具体的异常信息,而不是返回空指针异常。

    这个时候就对上游接口的异常信息十分了解,有针对性的做相应处理。

    以未登录异常为例,我的上游需要我登陆才能访问,那么我先定义一个LoginException.

    之所以继承RuntimeException是因为,出现这样的异常我们无法处理。所以就不需要try catch了。

    一、定义异常

    public class LoginException extends RuntimeException {
        private static final long serialVersionUID = -6479038174003545730L;
    
        public LoginException() {
            super();
        }
    
        public LoginException(String message) {
            super(message);
        }
    
    
    }

    二、抛出异常

    然后我们在可能出现异常的地方,抛出这种异常,显然只在调用别人特定接口的时候需要做这种处理

    public JSONObject checkLogin(String url, Headers headers, RequestBody body) {
            Response response = postData(url, headers, body);
            String string = null;
            try {
                string = response.body().string();
            } catch (IOException e) {
                e.printStackTrace();
            }
            JSONObject jsonObject = JSONObject.parseObject(string);
            JSONObject result = jsonObject.getJSONObject("result");
            if (result == null) {
                throw new LoginException(jsonObject.toJSONString());
            }
            return result;
        }

    三、统一处理异常

    我们在Controller中定义了全局的处理异常类,只需要增加捕获LoginException的方法即可

    @ControllerAdvice
    @ResponseBody
    public class GlobalException {
     ...
    
    @ExceptionHandler(value = LoginException.class)
        @ResponseStatus(HttpStatus.BAD_REQUEST)
        public BaseResponse loginException(Exception e) {
            e.printStackTrace();
            return BaseResultUtils.error(ERROR6);
        }
    
    ...
    
    }

    四、效果展示

    当我们不登录就访问上游接口的时候,再也不是返回空指针异常了

     最后补充:

    其实上面的处理逻辑有些武断,因为result等于null,不一定都是未登录导致的。

    如果对上游的错误码非常熟悉,应该做更细致的判断处理。

  • 相关阅读:
    Java中IO流的总结
    Java常用集合体系以及相互区别
    TreeMap集合特点、排序原理
    HashMap集合
    TreeSet集合
    redis 数据类型详解 以及 redis适用场景场合
    You need tcl 8.5 or newer in order to run the Redis test
    PHP 获取二维数组中某个key的集合
    Linux 定时任务
    phpmailer邮件类
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/15066556.html
Copyright © 2020-2023  润新知