Jersey 2.x:如何在RESTful Client上添加Headers

时间:2015-09-11 22:22:56

标签: java rest jersey jersey-2.0

我已经查看了How to add Headers on RESTful call using Jersey Client API,但这是针对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);
}

3 个答案:

答案 0 :(得分:9)

在Jersey 2.0+中,您可以在客户端API发出的请求中注册ClientRequestFiltermanipulate the headers自定义实现。

您可以通过传递到ClientRequestContext方法的filter参数来操纵标头。 getHeaders() method会返回MultivaluedMap您可以put标题的位置。

在致电ClientRequestFilter之前,您可以ClientConfig使用newClient register自定义config.register(MyAuthTokenClientRequestFilter.class);

System.src

答案 1 :(得分:8)

如果你想在Jersey 2.x客户端只添加几个标题,你可以在发送请求时简单地添加它,如下所示。

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

答案 2 :(得分:0)

要添加到Pradeep所说的内容,如果你有一堆标题,还有标题(MultivaluedMap&lt; String,Objects&gt;在WebTarget.request()下面):

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