java http 请求的异常处理

为什么要处理http请求异常?

因为网络是不稳定的、不可靠的,不能保证每次通知每次请求都可以发送或者接受成功。
最近在优化之前公司之前用的支付服务,要求对可能出现的所有网络状况进行异常处理,保证任何情况下都有良好的处理方式。
公司当前的采用了分布式系统来支持整个购票支付业务流程,其中涉及到网络的部分有1、票务服务去三方票务系统中查询票务;2、票务服务通知支付服务生成订单;3、支付完成之后付款方回调支付服务;4、支付服务回调票务服务通知付款结果。我们今天就来和大家讨论和分享一下最后一条第四点的中可能存在的请求异常。
我们服务直接的调用用的是原始的http调用restful风格的API,在支付服务中使用的是okhttp3。
OkHttp 是一个高效的 HTTP 客户端,具有非常多的优势:

1.能够高效的执行 http,数据加载速度更快,更省流量
2.支持 GZIP 压缩,提升速度,节省流量
3.缓存响应数据,避免了重复的网络请求
4.使用简单,支持同步阻塞调用和带回调的异步调用

先创建一个okhttpclient,分别设置了链接超时时间和响应超时时间都是三秒。

private static OkHttpClient client = client.newBuilder().connectTimeout(3000, TimeUnit.MILLISECONDS).readTimeout(3000, TimeUnit.MILLISECONDS).build();

post调用方法

private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");

public static String post(String url, String json) throws IOException {
    RequestBody body = RequestBody.create(JSON, json);
    Request request = new Request.Builder()
            .url(url)
            .post(body)
            .build();
    Response response = client.newCall(request).execute();
    return response.body().string();
}

我们可以发现在调用的过程中会抛出IOException,我们需要做的就是在业务逻辑中try/catch异常,并进行区分,做出相应的处理即可。

try {
	post(url,jsonParam);
}carch (IOException e) {
	//捕获到超时异常的时候,做出对应的处理操作
	if( e instanceof ConnectException ){
		doSomething();
	}
	//捕获到相应异常的时候,做出对应的操作
	if(e instanceof SocketTimeoutException) {
		doSomething();
	}
}
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值