私はすでに JerseyクライアントAPIを使用してRESTful呼び出しでヘッダーを追加する方法 を見ましたが、これはJersey 1.xの場合です。
Jersey 2.21でヘッダー値(認証トークンなど)を設定するにはどうすればよいですか?
これが私が使っているコードです:
public static String POST(final String url, final HashMap<String, String> params)
{
ClientConfig config = new ClientConfig();
Client client = ClientBuilder.newClient(config);
WebTarget target = client.target(url);
String data = new Gson().toJson(params);
Entity json = Entity.entity(data, MediaType.APPLICATION_JSON_TYPE);
Invocation.Builder builder = target.request(MediaType.APPLICATION_JSON_TYPE);
return builder.post(json, String.class);
}
Jersey 2.0以降では、クライアントAPIが送信するリクエストに ClientRequestFilter
のカスタム実装を登録できます ヘッダーを操作 。
ClientRequestContext
メソッドに渡されるfilter
パラメータを使用してヘッダーを操作できます。 getHeaders()
method は、ヘッダーをMultivaluedMap
できるput
を返します。
ClientRequestFilter
を呼び出す前に、_ registerClientConfig
でカスタムnewClient
を使用できます。
config.register(MyAuthTokenClientRequestFilter.class);
Jersey 2.xクライアントで少数のヘッダーのみを追加する場合は、次のように、リクエストの送信時にヘッダーを追加できます。
webTarget.request().header("authorization":"bearer jgdsady6323u326432").post(..)...
プラディープが言ったことに追加するために、もしヘッダーの塊がある場合、WebTarget.request()の下にheaders(MultivaluedMap <String、Objects>があります:
MultivaluedMap head = new MultivaluedHashMap();
head.add("something-custom", new Integer(10));
head.add("Content-Type", "application/json;charset=UTF-8");
builder.headers ( head ); // builder from Joshua's original example