在Retrofit2中显示错误响应的正确方法是什么?

时间:2018-01-24 10:45:05

标签: android gson retrofit2

我已经创建了Model类来处理我的Retrofit2 Callback:

public class ModelSendPhone {

@Expose
@SerializedName("code")
private int code;
@Expose
@SerializedName("user_id")
private int user_id;

public int getCode() {
    return code;
}

public void setCode(int code) {
    this.code = code;
}

public int getUser_id() {
    return user_id;
}

public void setUser_id(int user_id) {
    this.user_id = user_id;
}

这是我的通话代码:

Call<ModelSendCode> sendCodeCall = getRetrofit().sendCode(params);
sendCodeCall.enqueue(this);

现在我注意到如果我输入错误的@ Params,响应会给出错误422和JSON响应正文,其中包含以下消息:

{"name":"Unprocessable entity","message":"Wrong params","code":0,"status":422,"type":"yii\\web\\HttpException"}

我的问题是如何在onResponse方法中的Toast中显示此“消息”?当我正在实现Callback<ModelSendCode>时,我的onResponse方法没有解析它。

非常感谢

3 个答案:

答案 0 :(得分:0)

您的模型可能看起来像这样,只需检查状态即可。

public class ModelSendPhone implements Serializable
{
    private String message;

    private String status;

    private String name;

    private int user_id;

    private int code;

    private String type;

    public String getMessage ()
    {
        return message;
    }

    public void setMessage (String message)
    {
        this.message = message;
    }

    public String getStatus ()
    {
        return status;
    }

    public void setStatus (String status)
    {
        this.status = status;
    }

    public String getName ()
    {
        return name;
    }

    public void setName (String name)
    {
        this.name = name;
    }

    public int getUser_id ()
    {
        return user_id;
    }

    public void setUser_id (int user_id)
    {
        this.user_id = user_id;
    }

    public int getCode ()
    {
        return code;
    }

    public void setCode (int code)
    {
        this.code = code;
    }

    public String getType ()
    {
        return type;
    }

    public void setType (String type)
    {
        this.type = type;
    }

    @Override
    public String toString()
    {
        return "ClassPojo [message = "+message+", status = "+status+", name = "+name+", user_id = "+user_id+", code = "+code+", type = "+type+"]";
    }
}

答案 1 :(得分:0)

在onResponse方法中,您将获得类型为

的响应对象
Response<ModelSendCode>

这是一个HTTP响应。根据{{​​3}}

您只需执行response.message()即可从 HTTP 响应中获取消息。您还可以使用response.isSucessful()检查它是否成功。你试过了吗?

答案 2 :(得分:0)

感谢您的评论,但我找到了我需要的东西。 response.errorBody().string() 根据{{​​3}},这是正确的方法,以获得任何错误的默认响应,现在我将它转换为Json并按我的意愿解析它