改造 2.0 如何获得反序列化的错误响应。body
我正在使用Retrofit 2.0.0-beta1。
在测试中,我有一个替代方案,并期望错误HTTP 400
我希望有但是retrofit.Response<MyError> response
response.body() == null
MyError没有被去剥离 - 我只在这里看到它
response.errorBody().string()
但它没有给我MyError作为对象
我正在使用Retrofit 2.0.0-beta1。
在测试中,我有一个替代方案,并期望错误HTTP 400
我希望有但是retrofit.Response<MyError> response
response.body() == null
MyError没有被去剥离 - 我只在这里看到它
response.errorBody().string()
但它没有给我MyError作为对象
我目前使用一个非常简单的实现,它不需要使用转换器或特殊类。我使用的代码如下:
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()
错误响应是自定义响应对象
科特林
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);