我使用的是Retrofit 2.0.0-beta1。
在测试中,我有一个替代方案,并期望出现错误HTTP400
我想要retrofit.Response<MyError> response
,但要response.body() == null
MyError没有被反序列化--我只在这里看到它
response.errorBody().string()
但是它没有给我MyError作为对象
发布于 2015-09-11 18:06:30
通过以下方式解决:
Converter<MyError> converter =
(Converter<MyError>)JacksonConverterFactory.create().get(MyError.class);
MyError myError = converter.fromBody(response.errorBody());
发布于 2016-07-07 18:56:38
我目前使用的是一个非常简单的实现,它不需要使用转换器或特殊类。我使用的代码如下:
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()
只会返回一次正确的值。如果再次调用它,它将返回一个空字符串。因此,如果您想要重用它,请在第一次调用时将该值存储在变量中。
发布于 2018-02-13 19:35:23
ErrorResponse是您的自定义响应对象
Kotlin
val gson = Gson()
val type = object : TypeToken<ErrorResponse>() {}.type
var errorResponse: ErrorResponse? = gson.fromJson(response.errorBody()!!.charStream(), type)
Java
Gson gson = new Gson();
Type type = new TypeToken<ErrorResponse>() {}.getType();
ErrorResponse errorResponse = gson.fromJson(response.errorBody.charStream(),type);
https://stackoverflow.com/questions/32519618
复制相似问题