簡體   English   中英

通過 Jersey 客戶端調用 REST api 時添加多個標頭

[英]Adding multiple headers while calling REST api via Jersey clients

我正在嘗試添加多個標題。 但至今都慘敗。 我嘗試了很多代碼調整但失敗了。 有人可以幫我修復代碼或至少告訴我出了什么問題嗎?

頭映射代碼:

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

我認為這里的問題是,您嘗試訪問的 MAP 類型。

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

WebSource 構建器接受 header(String,Object)。 所以嘗試改變地圖類型。

基本身份驗證類似於: Authorization = "Authorization" ":" 憑據

一個例子

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

_headers.put("Authorization", authString );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM