ran*_*ana 8 client android metadata grpc grpc-java
我必须在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);
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:成功使用这种方式添加自定义标题
现在在我的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);
Run Code Online (Sandbox Code Playgroud)
///我构建了上面的请求并在伪调用中调用它,如下所示.
Iterator<Model> dataItems = service.getItems(SOMERequestBuilderObj);
I am trying to add a custom header like this -
Run Code Online (Sandbox Code Playgroud)
"Grps-Matches-Key:primary.secondary"
在Rest API调用中,我会将其添加为标题,例如builder.header("Grps-Matches-Key","primary.secondary");
希望这可以帮助 .
ran*_*ana 17
问题中的编辑版本也有效.在GRPC中,有许多方法可以添加标题(称为元数据).我们可以使用拦截器在上面的问题中添加元数据,或者我们可以为客户端存根添加元数据,或者您可以在客户端存根通道中发出请求之前添加元数据.
// create a custom header
Metadata header=new Metadata();
Metadata.Key<String> key =
Metadata.Key.of("Grps-Matches-Key", Metadata.ASCII_STRING_MARSHALLER);
header.put(key, "match.items");
// create client stub
ServiceGrpc.ServiceBlockingStub stub = ServiceGrpc
.newBlockingStub(channel);
Run Code Online (Sandbox Code Playgroud)
在使用MetadataUtils进行任何请求之前添加标头
stub = MetadataUtils.attachHeaders(stub, header);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6500 次 |
| 最近记录: |