Skip to content

拦截器

概述

在创建HTTP客户端的时候可以添加多个拦截器实例。拦截器对应于接口HttpInterceptor,它提供的方法和对应的回调时机如下:

方法回调时机
beforeSendHTTP请求发送之前回调
afterSendHTTP请求发送成功之后回调
onErrorHTTP请求发送异常时回调
afterCompletionHTTP请求处理完成之后回调

拦截器触发回调后,回调方法中的HttpRequestHttpResponse对象都是只读快照

内置拦截器

Solpic提供多个拦截器实现,见下表:

实现类开启选项功能
TracingInterceptorHTTP_ENABLE_EXECUTE_TRACING为请求添加TRACE_ID存放在附件中
LoggingInterceptorHTTP_ENABLE_LOGGING请求处理成功完成后打印日志
ProfileExecutionInterceptorHTTP_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();

贡献者

页面历史

Released under the MIT License.