web-dev-qa-db-ja.com

Jersey 2.x:RESTfulクライアントにヘッダーを追加する方法

私はすでに 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);
}
11
Joshua Kissoon

Jersey 2.0以降では、クライアントAPIが送信するリクエストに ClientRequestFilter のカスタム実装を登録できます ヘッダーを操作

ClientRequestContextメソッドに渡されるfilterパラメータを使用してヘッダーを操作できます。 getHeaders() method は、ヘッダーをMultivaluedMapできるputを返します。

ClientRequestFilterを呼び出す前に、_ registerClientConfigでカスタムnewClientを使用できます。

config.register(MyAuthTokenClientRequestFilter.class);
11
rgettman

Jersey 2.xクライアントで少数のヘッダーのみを追加する場合は、次のように、リクエストの送信時にヘッダーを追加できます。

webTarget.request().header("authorization":"bearer jgdsady6323u326432").post(..)...
9
Madura Pradeep

プラディープが言ったことに追加するために、もしヘッダーの塊がある場合、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
0
mojo-jojo