改造中的两种不同响应

时间:2018-10-23 15:35:13

标签: android json retrofit2 pojo

我在 POJO 中使用 Retrofit 发送注册屏幕,该屏幕通常有效,但是根据结果是否有效,答案有两个不同的对象。哪些是

{
    "errors": {
        "nome": [
            "Campo obrigatório"
        ],
        "sobrenome": [
            "Campo obrigatório"
        ]
    }
}

和:

{
    "success": {
        "nome": [
            "Campo obrigatório"
        ],
        "sobrenome": [
            "Campo obrigatório"
        ]
    }
}

还有我的POJO:

public class PostCadastro {

@SerializedName("nome")
@Expose
private String nome;
@SerializedName("sobrenome")
@Expose
private String sobrenome;

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getSobrenome() {
    return sobrenome;
}

public void setSobrenome(String sobrenome) {
    this.sobrenome = sobrenome;
}

我该如何应对这两个答复?

3 个答案:

答案 0 :(得分:2)

改装响应可以理解@SerializedName注释

public class PostCadastroResponse {
    @SerializedName("succes")
    @Nullable
    PostCadastro successResponse;
    @SerializedName("errors")
    @Nullable
    PostCadastro errorResponse;
}

如果出现错误,则错误将不会是null,否则不会成功。

但是更清洁的体系结构可能是服务器在发生错误时返回正确的代码和正确的错误消息的情况。您可以在Retrofit类中使用标准Response的isSuccessful

答案 1 :(得分:0)

我假设PostCadastro是您用来接收API响应的对象。在这种情况下,您将没有名为“错误”的变量或名为“成功”的变量来接收正确的响应。

您的响应对象中的变量名称需要与JSON树中的第一个节点匹配。在这种情况下,nome和sobrenome是“错误”和“成功”的子节点,因此改造将在响应对象中搜索名为“ errors”或“ success”的实例变量,找不到它,并且在您的nome和sobrenome字段中PostCadastro对象将为空。

答案 2 :(得分:0)

如果您有两个回复的成功状态代码,则可以创建:

@SerializedName(value = "success", alternate = {"errors"})
@Expose
private PostCadastro postCadastro;

public PostCadastro getPostCadastro() {
    return postCadastro;
}

public void setPostCadastro(PostCadastro postCadastro) {
    this.postCadastro = postCadastro;
}

public static class PostCadastro {
    @SerializedName("nome")
    @Expose
    private List<String> nome;
    @SerializedName("sobrenome")
    @Expose
    private List<String> sobrenome;

    public List<String> getNome() {
        return nome;
    }

    public void setNome(List<String> nome) {
        this.nome = nome;
    }

    public List<String> getSobrenome() {
        return sobrenome;
    }

    public void setSobrenome(List<String> sobrenome) {
        this.sobrenome = sobrenome;
    }
}