Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jersey 2.x: How to add Headers on RESTful Client

I've already looked at How to add Headers on RESTful call using Jersey Client API, however this is for Jersey 1.x.

How do I set a header value (such as an authorization token) in Jersey 2.21?

Here is the code I'm using:

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);
}
like image 307
Joshua Kissoon Avatar asked Sep 11 '15 22:09

Joshua Kissoon


1 Answers

In Jersey 2.0+, you can register a custom implementation of ClientRequestFilter that can manipulate the headers in the request that the Client API will send out.

You can manipulate the headers via the ClientRequestContext parameter that is passed into the filter method. The getHeaders() method returns the MultivaluedMap on which you can put your header(s).

You can register your custom ClientRequestFilter with your ClientConfig before you call newClient.

config.register(MyAuthTokenClientRequestFilter.class);
like image 55
rgettman Avatar answered Sep 20 '22 04:09

rgettman