首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Retrofit 2.0如何获取反序列化错误response.body

Retrofit 2.0如何获取反序列化错误response.body
EN

Stack Overflow用户
提问于 2015-09-11 17:03:58
回答 26查看 175.1K关注 0票数 175

我使用的是Retrofit 2.0.0-beta1

在测试中,我有一个替代方案,并期望出现错误HTTP400

我想要retrofit.Response<MyError> response,但要response.body() == null

MyError没有被反序列化--我只在这里看到它

response.errorBody().string()

但是它没有给我MyError作为对象

EN

回答 26

Stack Overflow用户

回答已采纳

发布于 2015-09-11 18:06:30

通过以下方式解决:

Converter<MyError> converter = 
    (Converter<MyError>)JacksonConverterFactory.create().get(MyError.class);
MyError myError =  converter.fromBody(response.errorBody());
票数 0
EN

Stack Overflow用户

发布于 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()只会返回一次正确的值。如果再次调用它,它将返回一个空字符串。因此,如果您想要重用它,请在第一次调用时将该值存储在变量中。

票数 175
EN

Stack Overflow用户

发布于 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);
票数 72
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32519618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档