在Unirest中获取本机REST服务错误



我们使用Unirest作为REST客户端。下面是我们调用REST服务时使用的示例代码

HttpResponse<JsonNode> response = Unirest
  .post(url)
  .header(HEADER_CONTENT_TYPE, HEADER_VALUE_APPLICATON_JSON)
  .body(payload)
  .asJson();

这绝对是REST服务返回json的时候。在出现错误的情况下,我使用的REST服务不会返回json响应。相反,它返回html错误页面。

由于Unirest正试图将html转换为json,因此出现以下问题

Caused by: 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]
    at com.mashape.unirest.http.HttpClientHelper.request(HttpClientHelper.java:143)
    at com.mashape.unirest.request.BaseRequest.asJson(BaseRequest.java:68)

在这种情况下,我们只得到这个InvalidJsonException,实际的html错误页面就会丢失。如果出现错误,我们需要在应用程序中显示html错误页面。

在这种情况下,我们如何获得原始REST服务错误?

由于不能依赖返回的内容类型,解决方法是将响应视为String:

  HttpResponse<String> response = Unirest
      .post(url)
      .header(HEADER_CONTENT_TYPE, HEADER_VALUE_APPLICATON_JSON)
      .body(payload)
      .asString();

这样,您就可以访问退货状态代码。Unirest不会尝试将结果解析为JSON,因此您需要自己进行解析(如果状态代码指示成功)。

相关内容

  • 没有找到相关文章

最新更新