9

REST クライアントとして Unirest を使用しています。以下は、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 サービス エラーを取得するにはどうすればよいでしょうか。

4

1 に答える 1

10

返されたコンテンツ タイプに依存できないため、回避策は応答を文字列として扱うことです。

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

このようにして、リターン ステータス コードにアクセスできます。Unirest は結果を JSON に解析しようとしないため、自分で行う必要があります (ステータス コードが成功を示している場合)。

于 2016-02-07T11:42:34.087 に答える