2016-09-23 50 views
1

我想添加多个头文件。但迄今为止失败惨败。我曾尝试过很多代码调整,但都失败了。有人可以帮我修复代码,或者至少告诉我什么是错的?通过Jersey客户端调用REST API时添加多个头文件

页眉映射代码:

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); 

UPDATE

如果在第二个片段我用下面的代码,而不是在循环设置标题,它的工作原理精细。这真的很奇怪。

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

“但惨遭失败至今”。你得到什么问题/错误? –

+0

我正在尝试向POST调用中添加多个标题,但是调用一个标题(始终是地图中的最后一个标题)时会附加上调用而不是三个标题。 – ManinGreen

+0

代码看起来不错。在'headers'的for循环中添加一些日志语句,以查看标题中添加的条目是否仍然保留。 –

回答

-1

基本身份验证是这样的:授权= “授权” “:” 凭据

为例

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

_headers.put("Authorization", authString); 
+0

我的问题与授权无关,请重新阅读问题。 – ManinGreen