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,不一定都是未登录导致的。

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

posted @   Mars.wang  阅读(81)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示