0
我必須在android grpc客戶端中添加一個自定義標題。我無法成功發送它。Android如何在grpc客戶端添加自定義標題?
public class HeaderClientInterceptor implements ClientInterceptor {
@Override
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(MethodDescriptor<ReqT, RespT> method,
CallOptions callOptions, Channel next) {
return new SimpleForwardingClientCall<ReqT, RespT>(next.newCall(method, callOptions)) {
@Override
public void start(Listener<RespT> responseListener, Metadata headers) {
/* put custom header */
Timber.d("header sending to server:");
Metadata fixedHeaders=new Metadata();
Metadata.Key<String> key =
Metadata.Key.of("Grps-Matches-Key", Metadata.ASCII_STRING_MARSHALLER);
fixedHeaders.put(key, "primary.secondary");
headers.merge(fixedHeaders);
super.start(new SimpleForwardingClientCallListener<RespT>(responseListener) {
@Override
public void onHeaders(Metadata headers) {
/**
* if you don't need receive header from server,
* you can use {@link io.grpc.stub.MetadataUtils attachHeaders}
* directly to send header
*/
Timber.e("header received from server:" + headers.toString());
super.onHeaders(headers);
}
}, headers);
}
};
}
}
編輯:採用這種方式添加的自定義頁眉成功我GRPC呼叫我打電話這樣
現在,
ClientInterceptor interceptor = new HeaderClientInterceptor();
Channel channel = ManagedChannelBuilder
.forAddress(BuildConfig.HOST, BuildConfig.PORT)
.build();
Channel channelWithHeader = ClientInterceptors
.intercept(channel, interceptor);
ServiceGrpc.ServiceBlockingStub service = ServiceGrpc
.newBlockingStub(channelWithHeader);
///我建立了上述請求,並如下所示在僞通話中調用它。
Iterator<Model> dataItems = service.getItems(SOMERequestBuilderObj);
I am trying to add a custom header like this -
「GRPS百搭重點:primary.secondary」
在REST API調用,我會加入這個作爲標題一樣, builder.header(「GRPS-Matches- Key「,」primary.secondary「);
希望這會有所幫助。