我们使用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服务的错误,在这样的情况呢?
既然你不能靠返回的内容类型,解决办法是对待响应为字符串:
HttpResponse<String> response = Unirest
.post(url)
.header(HEADER_CONTENT_TYPE, HEADER_VALUE_APPLICATON_JSON)
.body(payload)
.asString();
这样,您将有机会获得的返回状态代码。 Unirest不会尝试的结果来解析JSON,所以你需要自己做(如果状态代码指示成功)。