我在检索Json响应时遇到问题,以防服务器返回错误。详情见下文
我如何执行请求
我使用java.net.HttpURLConnection。我设置请求属性,然后执行以下操作:
conn=(HttpURLConnection)url.openConnection();
之后,当请求成功时,我得到响应Json:
br=新的BufferedReader(新的InputStreamReader((conn.getInputStream()));
sb=新的StringBuilder();
字符串输出;
而((output=br.readLine())!=null){
附加(输出);
}
使某人返回字符串();
。。。问题是:
当服务器返回一些错误(如50x或40x)时,我无法检索接收到的Json,。以下行引发IOException:
br=新的BufferedReader(新的InputStreamReader((conn.getInputStream()));
//抛出java.io.IOException:服务器返回URL:www.example.com的HTTP响应代码:401
服务器确实发送了body,我在外部工具Burp套件中看到了它:
HTTP/1.1
{“type”:“AuthApiException”,“message”:“AuthApiException”,“errors”:[{“field”:“email”,“message”:“无效的用户名和/或密码”。}]}
我可以使用以下方法获取响应消息(即“内部服务器错误”)和代码(即“500”):
连接getResponseMessage();
连接getResponseCode();
但我无法检索请求体。。。也许图书馆里有我没注意到的方法
如果响应代码不是200或2xx,请使用getErrorStream()而不是getInputStream()。