gRPC请求中对header进行处理

节选自:gRPC请求中对header进行处理


1.[Android (Java)]

1.1只设置客户端请求时附带的header

见类 io.grpc.stub.MetadataUtils,其中有个方法:

/**
 * Attaches a set of request headers to a stub.
 *
 * @param stub to bind the headers to.
 * @param extraHeaders the headers to be passed by each call on the returned stub.
 * @return an implementation of the stub with {@code extraHeaders} bound to each call.
 */
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/1789")
public static <T extends AbstractStub<T>> T attachHeaders(
        T stub,
        final Metadata extraHeaders) {
    return stub.withInterceptors(newAttachHeadersInterceptor(extraHeaders));
}

稍微自己封装一下的效果,如下:

private static <T extends AbstractStub<T>> T attachHeaders(T stub, final Map<String, String> headerMap) {
    Metadata extraHeaders = new Metadata();
    if (headerMap != null) {
        for (String key : headerMap.keySet()) {
            Metadata.Key<String> customHeadKey = Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER);
            extraHeaders.put(customHeadKey, headerMap.get(key));
        }
    }
    return MetadataUtils.attachHeaders(stub, extraHeaders);
}

发表评论