2016-12-29 6 views
0

Я считаю, что у меня есть ошибка в моем приложении.Как избежать chunked кодирования, когда остальные 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 напрямую, ответ показал нормально:

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 

*/ 

Редакция:

По какой-то причине проблема возникает снова.

Есть ли способ решить эту проблему?

+0

Это сообщение было изменено, потому что вопрос должен быть реорганизован –

ответ

1

Одно из решений заключается в создании пользовательского модуля политики и переопределить doApply метод для удаления заголовка Transfer-Encoding, если он равен chunked с помощью ApiResponse объекта.

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

И добавьте новый настраиваемый плагин политики в свои службы. Это простой tutorial для создания плагинов

+0

Решенный! \ o/Большое спасибо @ulab. –

+0

рад! пожалуйста. – ulab

+0

Я не знаю, если это лучшее, что нужно сделать. Это происходит потому, что моя служба не передает Content-Length в заголовке ответа. Это не проблема APIMan. Поэтому я должен добавить Content-Length на моем серверном сервере –