2016-11-11 2 views
1

HTTP引数からチェックサムを動的に計算しようとしています。そして、このチェックサムをHTTP引数として追加したいと思います。Retrofit2.1.0でビルドプロセス中にポストリクエストパラメータに渡す方法はありますか?

最初にパラメータとして渡されるフィールドを取得する必要がありますが、retrofitのように見えるのはURLクエリパラメータにしかアクセスできないようです。

@Gordakはクエリパラメータを取得する方法を示していますが、可能であれば、要求チェーン内のポストパラメータを取得する方法を示します。

+1

まず、私はあなたによく理解している場合を見てみましょう。私にとっては、HTTP引数から動的にチェックサムを計算しようとしています。次に、このチェックサムをHTTP引数として追加します。あれは正しいですか ? – Gordak

+0

@Gordak正確には、それは私が意味することです – Qin

答えて

1

でそれを書いてみるさて、ここで私達は行きます。

まず、OkHTTPクライアントをビルドし、オブジェクトを改造します。

 OkHttpClient client = httpBuilder 
       .addNetworkInterceptor(INTERCEPTOR_REQUEST_ADD_CHECKSUM) 
       .build(); 

     Retrofit retrofit = new Retrofit.Builder() 
       .addConverterFactory(GsonConverterFactory.create()) 
       .client(client) 
       .baseUrl("https://my.domain.com") 
       .build(); 

はその後、あなたはあなたのインターセプタを定義する必要があります。

private static final Interceptor INTERCEPTOR_REQUEST_ADD_CHECKSUM = new Interceptor() { 
     @Override 
     public Response intercept(Interceptor.Chain chain) throws IOException { 
      HttpUrl url = chain.request().url(); 
      String param1 = url.queryParameter("param1"); 
      String param2 = url.queryParameter("param2"); 
      String chk = aMethodToComputeChecksum(param1,param2); 

      url = url.newBuilder().addQueryParameter("checksum", chk).build(); 
      Request request = chain.request().newBuilder().url(url).build(); 
      return chain.proceed(request); 
     } 
+0

いくつかのパラメータ名が異なるAPIのために変更されているので、ありがとう、私はqueryParameterNamesを使用してすべてのキーを取得し、最初のメソッドでは、後でリクエスト本体からパラメータを取得するかどうかをチェックします。 – Qin

+0

はい。次に、チェックサムを計算するメソッドに文字列の配列(またはリスト)を渡します; – Gordak

+0

遅れてごめんなさい。しかしリクエストチェーン内のRequestBodyにビルドされた投稿パラメータを取得する方法はないようです。 – Qin

0

多分それは役立ちます - 一度このパラメータを計算し、RequestInterceptor

+0

retrofit2 RequestInterceptorの代わりにインターセプタを使用して、私が思ったのは、一度計算したいのですが、argsを修正することができます、argsはこのpiontには知られていません私は傍受プロセス中に要求パラメータを得ることができる方法 – Qin

関連する問題