当我执行这个unirest请求
HttpResponse<JsonNode> response = Unirest.get("myUrl/" + id + "/step")
.headers(headers)
.asJson();
如果实际响应是401或其他任何内容(例如,未找到404),则它会因for Json异常而被隐藏:
com.mashape.unirest.http.exceptions.UnirestException: java.lang.RuntimeException: java.lang.RuntimeException: org.json.JSONException: A JSONArray text must start with '[' at 1 [character 2 line 1]
如果我通过身份验证不正确直接致电myUrl/" + id + "/step"
(从我的浏览器中),我会收到401。asJson()
的电话隐藏了401。请提出一种解决方法(例如响应401)。
答案 0 :(得分:0)
对asJson()
的调用没有隐藏任何内容。由于您未指定其他选择,因此它试图解析您的响应。获得401或404响应并不是例外情况,因此您需要使用普通的if
语句来处理它。
您也没有义务链接方法调用。 documentation解释了如何中断通话。例如,您的案例可以改写为
GetRequest request = Unirest.get("myUrl/" + id + "/step");
HttpResponse<JsonNode> response = request.headers(headers).asJson();
现在,您可以在两行代码之间放置错误检查代码。在您的特定情况下,您可能希望调用request.getStatus()
以确保该代码不是403,或者不是200范围内的其他任何代码:
if(request.getStatus() / 100 != 2) {
// Handle non 2xx responses
}