拦截器
概述
在创建HTTP
客户端的时候可以添加多个拦截器实例。拦截器对应于接口HttpInterceptor
,它提供的方法和对应的回调时机如下:
方法 | 回调时机 |
---|---|
beforeSend | 在HTTP 请求发送之前回调 |
afterSend | 在HTTP 请求发送成功之后回调 |
onError | 在HTTP 请求发送异常时回调 |
afterCompletion | 在HTTP 请求处理完成之后回调 |
拦截器触发回调后,回调方法中的HttpRequest
和HttpResponse
对象都是只读快照。
内置拦截器
Solpic
提供多个拦截器实现,见下表:
实现类 | 开启选项 | 功能 |
---|---|---|
TracingInterceptor | HTTP_ENABLE_EXECUTE_TRACING | 为请求添加TRACE_ID 存放在附件中 |
LoggingInterceptor | HTTP_ENABLE_LOGGING | 请求处理成功完成后打印日志 |
ProfileExecutionInterceptor | HTTP_ENABLE_EXECUTE_PROFILE | 记录请求调用耗时存放在附件中 |
以使用TracingInterceptor
为例:
java
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://httpbin.org/get"))
.method(HttpMethod.GET)
.build();
HttpClient httpClient = Solpic.newHttpClientBuilder().option(HttpOptions.HTTP_ENABLE_EXECUTE_TRACING, true).build();
HttpResponse<String> response = httpClient.send(request, PayloadSubscribers.X.ofString());
String traceId = request.getAttachment(SolpicConstants.REQUEST_TRACE_ID_KEY);
System.out.printf("traceId: %s\n", traceId);
自定义实现
可以自行实现HttpInterceptor
接口,例如:
java
class CustomInterceptor implements HttpInterceptor {
@Override
public void beforeSend(HttpRequest request) {
System.out.printf("beforeSend, uri: %s\n", request.getUri());
}
@Override
public void afterSend(HttpRequest request, HttpResponse<?> response) {
System.out.printf("afterSend, uri: %s\n", request.getUri());
}
@Override
public void onError(HttpRequest request, Throwable throwable) {
System.out.printf("onError, uri: %s, message: %s\n", request.getUri(), throwable.getMessage());
}
@Override
public void afterCompletion(HttpRequest request, HttpResponse<?> response) {
System.out.printf("afterCompletion, uri: %s\n", request.getUri());
}
}
使用自定义拦截器:
java
HttpClient httpClient = Solpic.newHttpClientBuilder()
.addInterceptor(new CustomInterceptor())
.build();