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
この答え詳細については。