2016-12-29 53 views
0

我相信我的應用程序出錯了。如何在其他api通過APIMan時避免分塊編碼?

當我嘗試從url檢索信息時,JSON對象上出現錯誤。 這是因爲某種原因發生的,APIMan在響應中包含了一種編碼。這裏是我的代碼:

Client client = Client.create(); 
WebResource webResource = client.resource(uri); 
ClientResponse response = webResource.header("X-API-Key", xApiKey) 
    .header("Content-Type", "application/json; charset=UTF-8") 
    .header("Accept", "application/json") 
    .header("Authorization", "Bearer " + token) 
    .get(ClientResponse.class); 
String json = response.getEntity(String.class); 

當我將通過apiman的請求,我的回答是表現出有特殊字符:

public static void main(String[] args) { 
    String uri = "https://apiman.url/apiman-gateway/org/api/1.0/method"; 
    String apiKey = "894fd5b3-36f0-32974-xxxxxxxx"; 
    get("token", uri, apiKey); 
} 

// response is 1ff8\r\n{"data":...1ff8\r\nSim"[9867,"CAR\r\n1c7d\r\n...}\r\n0\r\n\r\n 

當我不使用apiman,那麼我的反應是不同的,顯示如下:

public static void main(String[] args) { 
    String uri = "https://192.168.56.22:8080/app/method"; 
    String apiKey = "not needed"; 
    get("token", uri, apiKey); 
} 

// response is ok {"data":...Sim"[9867,"CAR...} 

的PS.:The一部分「...」這只是我不在這裏傳遞的所有數據。

有沒有人有同樣的問題?看起來一些字符有不同的編碼類型。

Edit.1:

如果我嘗試直接訪問apiman URL,響應表明OK:

https://apiman.url/apiman-gateway/org/api/1.0/method?apikey=894fd5b3-36f0-32974-xxxxxxxx 

// response is ok {"data":...Sim"[9867,"CAR...} 

在另一個測試中,我用捲曲的方法:

curl -i -X GET -H "Content-Type:application/json" -H "X-API-Key:894fd5b3-36f0-32974-xxxxxxxx" 'https://apiman.url/apiman-gateway/org/api/1.0/method' 

/* response is 1ff8 
{"data":... 
1ff8 
Sim"[9867,"CAR 
1c7d 
...} 
0 

*/ 

編輯.2:

由於某種原因,問題再次出現。

有沒有辦法解決這個問題?

+0

這個帖子被修改,因爲這個問題必須被重構 –

回答

1

一種解決方案是創建自定義策略插件並覆蓋doApply方法,以刪除Transfer-Encoding標頭,如果它等於chunked使用ApiResponse對象。

apiresponse.getHeaders().remove("Transfer-Encoding"); 

並將新的自定義策略插件添加到您的服務。這是一個簡單的tutorial來創建插件

+0

解決! \ o /非常感謝@ulab。 –

+0

很高興!不用謝。 – ulab

+0

我不知道這是否是最好的事情。發生這種情況是因爲我的服務沒有在Response Header上傳遞Content-Length。這不是APIMan的問題。所以我必須在我的後端服務器 –

相關問題