Unirest ответ скрывает истинное исключение - PullRequest
0 голосов
/ 24 октября 2018

Когда я выполняю этот самый неподтвержденный запрос

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 голосов
/ 24 октября 2018

Звонок на asJson() ничего не скрывает.Он пытается проанализировать ваш ответ, потому что вы не указали никакой альтернативы.Получение ответа 401 или 404 не является исключительным случаем, поэтому вам нужно обработать его с помощью обычной инструкции if.

Вы также не обязаны связывать вызовы методов.Документация объясняет, как прерывать ваши звонки.Например, ваш случай может быть переписан как

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
}
...