获取Unirest原生REST服务错误

问题描述 投票:8回答:1

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

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

这绝对是当REST服务返回JSON。在错误中,我使用的是不是返回JSON响应REST服务的情况。相反,它返回的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服务的错误,在这样的情况呢?

java json unirest mashape
1个回答
9
投票

既然你不能靠返回的内容类型,解决办法是对待响应为字符串:

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

这样,您将有机会获得的返回状态代码。 Unirest不会尝试的结果来解析JSON,所以你需要自己做(如果状态代码指示成功)。

© www.soinside.com 2019 - 2024. All rights reserved.