2016-12-29 2 views
0

Je crois que j'ai eu une erreur sur mon application.Comment éviter l'encodage en segments lorsque l'API restante passe par APIMan?

Lorsque j'essaie d'extraire des informations de l'URL, une erreur est survenue sur l'objet JSON. Cela se produit car, pour une raison quelconque, APIMan inclut une sorte d'encodage dans la réponse. Voici mon code:

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

quand j'envoyer une demande par apiman, ma réponse est montré avec des caractères spéciaux:

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 

quand je ne l'utilise apiman, alors ma réponse est différente comme montré ci-dessous :

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...} 

partie PS.:The de « ... » il était juste moi de ne pas transmettre toutes les données ici.

Est-ce que quelqu'un a eu le même problème? Il semble que certains caractères ont un type d'encodage différent.

Edit.1:

Si je tente d'accéder à l'url apiman directement, la réponse est montré ok:

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

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

Dans un autre test, j'ai utilisé la méthode cURL:

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 

*/ 

Édition.2:

Pour une raison quelconque, le problème se produit à nouveau.

Existe-t-il un moyen de résoudre ce problème?

+0

ce message a été modifié car la question doit être refactorisée –

Répondre

1

Une solution est de créer un plugin de stratégie personnalisée et passer outre doApply méthode pour supprimer l'en-tête Transfer-Encoding si elle est égale à l'aide chunked objet ApiResponse.

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

Ajoutez le nouveau plugin de stratégie personnalisé à vos services. Ceci est un simple tutorial pour créer des plugins

+0

Résolu! \ o/Merci beaucoup @ulab. –

+0

content! vous êtes les bienvenus. – ulab

+0

Je ne sais pas si c'est la meilleure chose à faire. Cela se produit parce que mon service ne passe pas la longueur de contenu sur l'en-tête de réponse. Ce n'est pas un problème d'APIMan. Donc, je dois ajouter le Content-Length sur mon serveur backend –