getInputStream()抛出异常后,如何取得实际返回的json语句?

雨中的月儿 2015-08-26 07:24:11
先上代码(HttpsUrlConnection客户端):

inputStream = httpsConn.getInputStream(); // 在这个地方抛出异常
InputStreamReader isr = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(isr);

StringBuilder stringBuilder = new StringBuilder();
String strReadLine = null;
while ((strReadLine = reader.readLine()) != null) {
stringBuilder.append(strReadLine).append("\r\n");
}

httpsResp.strRespBody = stringBuilder.toString();
httpsResp.iRespStatusCode = httpsConn.getResponseCode();
httpsResp.strRespMessage = httpsConn.getResponseMessage();
httpsResp.iCheckValid = 1;
httpsResp.respHeaders = httpsConn.getHeaderFields();


正常情况下,上述代码根据getInputStream可以读出服务器返回的json语句。
但在向服务器发送错误的json语句请求体之后,服务器会返还400错误,并附带json语句用于描述错误消息。如下:
HTTP/1.1 400 Bad Request
Server: Tengine
Date: Wed, 26 Aug 2015 11:12:11 GMT
Content-Type: application/json;charset=utf-8
Content-Length: 180
Connection: keep-alive
Cache-Control: no-cache,no-store
Pragma: no-cache

{"code":111,"error":"Invalid value type for field 'Relation01',expect type is {:className \"Test01\", :type \"Relation\"},but it is '{:className \"Test02\", :type \"Relation\"}'."}

请问高手,此时,由于400错误,getInputStream()的调用会抛出异常(导致inputStream变量为null),跳转到异常处理之后,如何取得服务器发送过来的json语句。
...全文
258 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuangqingch 2015-08-26
  • 打赏
  • 举报
回复
雨中的月儿 2015-08-26
  • 打赏
  • 举报
回复
自己已经解决~~~


			int iRetCode = httpsConn.getResponseCode();
			if (iRetCode >= 400) {
				inputStream = httpsConn.getErrorStream();
				result = MuYaHttpsRespResult.Refused;
			}
			else {
				inputStream = httpsConn.getInputStream();
				result = MuYaHttpsRespResult.Success;
			}
			
			InputStreamReader isr = new InputStreamReader(inputStream);
			BufferedReader reader = new BufferedReader(isr);
			
			StringBuilder stringBuilder = new StringBuilder();
			String strReadLine = null;
			while ((strReadLine = reader.readLine()) != null) {
				stringBuilder.append(strReadLine).append("\r\n");
			}
			
			httpsResp.strRespBody = stringBuilder.toString();
			httpsResp.iRespStatusCode = httpsConn.getResponseCode();
			httpsResp.strRespMessage = httpsConn.getResponseMessage();
			httpsResp.result = result;
			httpsResp.respHeaders = httpsConn.getHeaderFields();	

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧