提交 b7d279d2 编写于 作者: 如梦技术's avatar 如梦技术 🐛

mica-http 添加 HttpException 方便异常时获取相应信息。

上级 b15faab4
......@@ -18,6 +18,7 @@ package net.dreamlu.mica.http;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Request;
import okhttp3.Response;
import javax.annotation.ParametersAreNonnullByDefault;
......@@ -38,7 +39,8 @@ public class AsyncCallback implements Callback {
@Override
public void onFailure(Call call, IOException e) {
exchange.onFailure(call.request(), new HttpException(e));
Request request = call.request();
exchange.onFailure(request, new HttpException(request, e));
}
@Override
......
......@@ -65,7 +65,8 @@ public class Exchange {
try (HttpResponse response = new HttpResponse(call.execute())) {
return func.apply(response);
} catch (IOException e) {
failedBiConsumer.accept(call.request(), new HttpException(e));
Request request = call.request();
failedBiConsumer.accept(request, new HttpException(request, e));
return null;
}
}
......@@ -79,7 +80,8 @@ public class Exchange {
failedBiConsumer.accept(call.request(), new HttpException(response));
}
} catch (IOException e) {
failedBiConsumer.accept(call.request(), new HttpException(e));
Request request = call.request();
failedBiConsumer.accept(request, new HttpException(request, e));
}
return null;
}
......@@ -96,7 +98,7 @@ public class Exchange {
* Returns ok http response.
*
* <p>
* 注意:body 不能读取,因为已经关闭掉了,建议还是直接用 onResponse 函数处理。
* 注意:body 不能读取,因为已经关闭掉了,建议还是直接用 onResponse 函数处理。
* </p>
*
* @return Response
......
......@@ -16,7 +16,11 @@
package net.dreamlu.mica.http;
import javax.annotation.Nullable;
import okhttp3.Protocol;
import okhttp3.Request;
import okhttp3.Response;
import javax.annotation.ParametersAreNonnullByDefault;
import java.io.IOException;
/**
......@@ -24,21 +28,20 @@ import java.io.IOException;
*
* @author L.cm
*/
@ParametersAreNonnullByDefault
public class HttpException extends IOException {
@Nullable
private final ResponseSpec response;
public HttpException(ResponseSpec response) {
HttpException(ResponseSpec response) {
super(response.toString());
this.response = response;
}
public HttpException(Throwable cause) {
HttpException(Request request, Throwable cause) {
super(cause);
this.response = null;
this.response = getResponse(request, cause.getMessage());
}
@Nullable
public ResponseSpec getResponse() {
return response;
}
......@@ -53,4 +56,21 @@ public class HttpException extends IOException {
}
}
/**
* 构造 HttpResponse
*
* @param request Request
* @param message message
* @return HttpResponse
*/
private static HttpResponse getResponse(Request request, String message) {
Response response = new Response.Builder()
.request(request)
.protocol(Protocol.HTTP_1_1)
.message(message)
.code(500)
.build();
return new HttpResponse(response);
}
}
......@@ -13,9 +13,7 @@ public class HttpTest {
.onFailed((request, e) -> {
e.printStackTrace();
ResponseSpec response = e.getResponse();
if (response != null) {
System.out.println(response.asString());
}
System.out.println(response.asString());
})
.onSuccessful(ResponseSpec::asString);
System.out.println(html);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册