Retrofit 2.0 how to get deserialised error response.body Ask Question

Retrofit 2.0 how to get deserialised error response.body Ask Question

I'm using Retrofit 2.0.0-beta1.

In tests i have an alternate scenario and expect error HTTP 400

I would like to have retrofit.Response<MyError> response but response.body() == null

MyError is not deserialised - i see it only here

response.errorBody().string()

but it doesn't give me MyError as object

ベストアンサー1

私は現在、コンバーターや特別なクラスを使用する必要のない非常に簡単な実装を使用しています。私が使用するコードは次のとおりです。

public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
    DialogHelper.dismiss();

    if (response.isSuccessful()) {
        // Do your success stuff...
    } else {
        try {
            JSONObject jObjError = new JSONObject(response.errorBody().string());
            Toast.makeText(getContext(), jObjError.getJSONObject("error").getString("message"), Toast.LENGTH_LONG).show();
        } catch (Exception e) {
            Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_LONG).show();
        }
    }
}

ここで注意すべき点は、response.errorBody().string()正しい値が返されるのは 1 回だけであるということです。再度呼び出すと、空の文字列が返されます。したがって、再利用したい場合は、最初の呼び出しで値を変数に保存してください。

バッファの読み取りポインタtoString()を更新しない独自の実装を作成することで、次の呼び出しで空にすることなく応答からエラー本文の文字列を取得する方法があります。errorBodyこの答え詳細については。

おすすめ記事