改造 2.0 如何获得反序列化的错误响应。body

2022-08-31 06:30:02

我正在使用Retrofit 2.0.0-beta1

在测试中,我有一个替代方案,并期望错误HTTP 400

我希望有但是retrofit.Response<MyError> responseresponse.body() == null

MyError没有被去剥离 - 我只在这里看到它

response.errorBody().string()

但它没有给我MyError作为对象


答案 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()


答案 2

错误响应是自定义响应对象

科特林

val gson = Gson()
val type = object : TypeToken<ErrorResponse>() {}.type
var errorResponse: ErrorResponse? = gson.fromJson(response.errorBody()!!.charStream(), type)

爪哇岛

Gson gson = new Gson();
Type type = new TypeToken<ErrorResponse>() {}.getType();
ErrorResponse errorResponse = gson.fromJson(response.errorBody.charStream(),type);

推荐