Unirest的回应掩盖了真正的例外

时间:2018-10-24 16:33:06

标签: java json unirest

当我执行这个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)。

1 个答案:

答案 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
}