Android 改造中的两种不同响应

Android 改造中的两种不同响应,android,json,retrofit2,pojo,Android,Json,Retrofit2,Pojo,我正在使用reformation和POJO发送一个注册屏幕,该屏幕通常有效,但根据结果是否有效,答案有两个不同的对象。它们是: { "errors": { "nome": [ "Campo obrigatório" ], "sobrenome": [ "Campo obrigatório" ] } } 以及: 还有我的POJO: public class PostCa

我正在使用reformationPOJO发送一个注册屏幕,该屏幕通常有效,但根据结果是否有效,答案有两个不同的对象。它们是:

{
    "errors": {
        "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;
}

如何处理这两个响应?

我假设PostAdastro是用于接收API响应的对象。在这种情况下,您没有名为“errors”的变量或名为“success”的变量来接收正确的响应


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

改型响应理解
@SerializedName
注释

public class PostCadastroResponse {
    @SerializedName("succes")
    @Nullable
    PostCadastro successResponse;
    @SerializedName("errors")
    @Nullable
    PostCadastro errorResponse;
}
如果出现错误,则错误将不为空,否则为成功


但是,当服务器返回正确的代码和错误消息时,更干净的体系结构就可以了。您可以在
响应

中使用标准
改装
的isSuccessful,如果您有两个响应的成功状态代码,您可以创建:

@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;
    }
}
@SerializedName(value=“success”,alternate={“errors”})
@暴露
私人邮政卡;邮政卡;
公共PostAdastro getPostAdastro(){
返回后adastro;
}
公共无效setPostAdastro(PostAdastro PostAdastro){
this.postCadastro=postCadastro;
}
公共静态类后适配器{
@序列化名称(“nome”)
@暴露
非公开名单;
@序列化名称(“SobreName”)
@暴露
私有列表sobrenome;
公共列表getNome(){
返回nome;
}
公共无效集合名称(列表名称){
this.nome=nome;
}
公共列表getSobreName(){
返回sobrenome;
}
公共无效设置SobreName(列表SobreName){
this.sobrenome=sobrenome;
}
}

也可能
备用
属性适用于
@SerializedName
@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;
    }
}