2017-07-16 8 views
0

私はアンドロイドgrpcクライアントでカスタムヘッダーを追加する必要があります。私はそれを正常に送信することができません。Android grpc clientにカスタムヘッダーを追加するには?

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 - 

"のGRP-マッチキー:primary.secondary" 私のようなヘッダーとしてこれを追加しているでしょうREST APIの呼び出しで

、 builder.header(「GRPS-Matches- Key "、" primary.secondary ");

これが役に立ちます。

答えて

3

問題の編集されたバージョンも機能します。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); 

MetadataUtilsを

stub = MetadataUtils.attachHeaders(stub, header); 
を使用してここに示されているように、任意の要求を行う前にヘッダを追加
関連する問題