J'utilise Apache HttpComponents Client pour POST sur un serveur qui renvoie JSON. Le problème est que si le serveur renvoie une erreur 400, il semble que je n'ai aucun moyen de dire quelle erreur il a eu de Java (il a dû recourir à un sniffer de paquets jusqu'à présent - ridicule). Voici le code:Comment puis-je obtenir l'erreur réelle derrière HttpResponseException?
HttpClient httpclient = new DefaultHttpClient();
params.add(new BasicNameValuePair("format", "json"));
params.add(new BasicNameValuePair("foo", bar));
HttpPost httppost = new HttpPost(uri);
// this is how you set the body of the POST request
httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
String responseBody = "";
try {
// Create a response handler
ResponseHandler<String> responseHandler = new BasicResponseHandler();
responseBody = httpclient.execute(httppost, responseHandler);
} catch(HttpResponseException e) {
String error = "unknown error";
if (e.getStatusCode() == 400) {
// TODO responseBody and e.detailMessage are null here,
// even though packet sniffing may reveal a response like
// Transfer-Encoding: chunked
// Content-Type: application/json
//
// 42
// {"error": "You do not have permissions for this operation."}
error = new JSONObject(responseBody).getString("error"); // won't work
}
// e.getMessage() is ""
}
Qu'est-ce que je fais mal? Il doit y avoir un moyen facile d'obtenir le message d'une erreur 400. C'est élémentaire.
Cela a fonctionné; Merci. Tout ce qui restait était de slurp le responseBody InputStream dans une chaîne. –
Vous pouvez utiliser EntityUtils.toString (entity) pour le convertir en chaîne. Il gère la conversion de caractères pour vous. BTW, erreur JSON devrait être de retour avec 200. Sinon, vous ne pouvez pas obtenir de réponse du navigateur. –
aidez s'il vous plaît ici - http://stackoverflow.com/questions/1490341/how-can-i-get-the-actual-error-behind-httpresponseexception –