Два разных ответа в модернизации - PullRequest
0 голосов
/ 23 октября 2018

Я использую Retrofit с POJO для отправки экрана регистрации, который обычно работает, но ответ имеет два разных объекта в зависимости от того, является ли результат действительным.Какие:

{
    "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 голосов
/ 23 октября 2018

Модифицированные ответы понимают @SerializedName аннотацию

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

Если ошибка, то ошибки будут не null, а в противном случае будут успешными.

Но более чистая архитектура может быть, когда ваш сервер вернет правильный коди правильное сообщение об ошибке в случае ошибки.Вы можете использовать стандарт Retrofit isSuccessful в Response классе

0 голосов
/ 23 октября 2018

Если у вас есть код состояния успеха для двух ответов, вы можете создать:

@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;
    }
}
0 голосов
/ 23 октября 2018

Я предполагаю, что PostCadastro - это объект, который вы используете для получения ответа API.В этом случае у вас нет переменной с именем «errors» или переменной «success» для получения правильного ответа.

Имена переменных в вашем объекте ответа должны соответствовать первым узлам в дереве JSON.В этом случае nome и sobrenome являются подузлами «ошибок» и «успеха», поэтому модификация будет искать переменную экземпляра в объекте ответа с именем «ошибки» или «успех», не найдет его и поля nome и sobrenome в вашемОбъект PostCadastro будет нулевым.

...