2017-05-15 1 views
-1

4つのパラメータを受け入れるpostメソッドがあります。2つ以上のヘッダを受け入れるPOSTコールを構築する再利用可能なメソッドを作成します

 RequestBody body = RequestBody.create(type, postData); 
     Request request = new Request.Builder() 
            .url(url) 
            .addHeader("Authorization", ssid) 
            .post(body) 
            .build(); 

ただし、私の呼び出しでは複数のヘッダーがありません。コンテキストマップに値を渡すことができます。しかし、どのようにして複数のヘッダー値を受け入れる方法で要求を構築できますか?

例では、上記のコードは承認ヘッダーを受け入れます。 もう1つの呼び出しには、2つ以上のヘッダtag1、tag2があります。このメソッドは、2つの値のセットが渡されたことを伝えることができ、それに応じて要求を構築する必要があります。それは可能でしょうか?

答えて

0

すぐに結果がbuildになる必要はありません。変数にRequest.Builder()の結果を格納し、ヘッダーをループして、ビルダーに追加することができます。 build()を呼び出すまでは、ビルダーを変更するために使用するループや関数を使用して構築されるものを変更し続けることができるので、これはコンストラクターの代わりにビルダを使用することの利点の1つです。

Request request = requestWithManyHeaders(
    url, 
    body, 
    Arrays.asList("auth", "tag1", "tag2"), 
    Arrays.asList("authValue", "tag1Value", "tag2Value") 
); 
+0

おかげで、私は常に私の方法を変更する必要はありません:

public static Request requestWithHeaders(String url, RequestBody body, List<String> headerNames, List<String> headerValues) { if (headerNames.size() != headerValues.size()) { throw new IllegalArgumentException(String.format( "Must provide the same number of header names and header values. " + "%d header names and %d header values provided", headerNames.size(), headerValues.size())); } Request.Builder builder = new Request.Builder() .url(url) .post(body); for (int i = 0; i < headerNames.size(); ++i) { builder.addHeader(headerNames.get(i), headerValues.get(i)); } return builder.build(); } 

あなたは、インスタンスのために、このようにそれを呼び出すことができます。 n個のヘッダを取り、リクエストを作成する再利用可能なメソッドを作成したいと考えています。あなたのソリューションでは、私はすべての呼び出しのためのメソッドを記述し、手動でヘッダを追加する必要があります。 – Raghu

+0

私は自分の答えを調整しました。 –

関連する問題