Tengo un problema para recuperar la respuesta de Json en caso de que el servidor devuelva un error. Vea los detalles abajo.
Cómo realizo la solicitud
Yo uso java.net.HttpURLConnection
. Configuro propiedades de solicitud, luego lo hago:
conn = (HttpURLConnection) url.openConnection();
Después de eso, cuando la solicitud es exitosa, obtengo la respuesta Json:
br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
sb = new StringBuilder();
String output;
while ((output = br.readLine()) != null) {
sb.append(output);
}
return sb.toString();
... y el problema es:
No puedo recuperar Json recibido cuando el servidor devuelve algún error como 50x o 40x. La siguiente línea arroja IOException:
br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
// throws java.io.IOException: Server returned HTTP response code: 401 for URL: www.example.com
El servidor envía el cuerpo seguro, lo veo en la herramienta externa Burp Suite:
HTTP/1.1 401 Unauthorized
{"type":"AuthApiException","message":"AuthApiException","errors":[{"field":"email","message":"Invalid username and/or password."}]}
Puedo obtener un mensaje de respuesta (es decir, "Error interno del servidor") y el código (es decir, "500") usando los siguientes métodos:
conn.getResponseMessage();
conn.getResponseCode();
Pero no puedo recuperar el cuerpo de la solicitud ... ¿tal vez hay algún método que no noté en la biblioteca?