通过Jersey客户端调用REST api时添加多个标头

时间:2016-09-23 13:18:54

标签: java rest jersey http-headers jersey-client

我正在尝试添加多个标头。但到目前为止惨遭失败。我曾尝试过很多代码调整但失败了。有人可以帮我修复代码或者至少告诉我什么是错的吗?

标头映射代码:

    Map<String, String> headers = new HashMap<String, String>();

    headers.put("authorization", authToken);
    headers.put("API-Version", apiVersion);
    headers.put("Content-Type", MediaType.APPLICATION_JSON);

实际通话代码:

    String serviceUrl = serviceHostUrl;
    Client client = Client.create();
    WebResource webResource = client.resource(serviceUrl).path(path);

    WebResource.Builder builder = webResource.getRequestBuilder();
    if(headers != null && !headers.isEmpty()) {
        for(Map.Entry<String, String> entry : headers.entrySet()) {
            builder.header(entry.getKey(), entry.getValue());
        }
    }

    ClientResponse response = builder.post(ClientResponse.class, input);

更新

如果在第二个片段中我使用下面的代码而不是在循环中设置标题,它可以正常工作。这真的很奇怪。

    builder.header("authorization", "Basic SDFSFSDFSDFSDFSDFSDFSDF");
    builder.header("API-Version", "5.2");
    builder.header("Content-Type", MediaType.APPLICATION_JSON);

1 个答案:

答案 0 :(得分:-2)

基本身份验证如下:授权=&#34;授权&#34; &#34;:&#34;凭证

一个例子

byte[] loginBytes = ("1" + ":" + "1").getBytes();
StringBuilder authString = new StringBuilder().append("Basic ")
                .append(Base64.encodeToString(loginBytes, Base64.NO_WRAP));

_headers.put("Authorization", authString );