Как настроить Retrofit для преобразования успешных / ошибочных ответов - PullRequest
0 голосов
/ 30 апреля 2019

Сервер отправляет ответ в случае успеха (код 2xx):

{
    "user":"User",
    "age":16
}

И в случае сбоя (4xx) следующий Json отправляется в errorBody:

{
    "errorMessage":"Server is not working",
    "action":{
         ...
    }
}

Как я могу настроить Retrofit так, чтобы он автоматически конвертировал ответы, основанные на успехе / неудаче. Примечание : я использую JavaRx v2.2.0 и Retrofit v2.4.0

Мой метод вызова API выглядит следующим образом:

@GET("/screens/home")
Single<HomeResponse> getHome(@Query("langCode") String langCode);

Я пытался инкапсулировать HomeResponse (мой собственный класс Java) с Response (Retrofit's).Тем не менее, я не получил, я хочу.

@GET("/screens/home")
Single<Reponse<HomeResponse>> getHome(@Query("langCode") String langCode);

Ответы [ 3 ]

1 голос
/ 30 апреля 2019

вы можете создать класс pojo, используя эту ссылку , напишите в json оба поля с именами «успех» и «ошибка», которые вы получаете, объедините json и создайте класс pojo

Вы можете проверить ответ по status или что-то, что определяет, что это error ответ

EDIT

смотри это

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class MyApiResponse {

@SerializedName("user")
@Expose
private String user;
@SerializedName("age")
@Expose
private Integer age;
@SerializedName("errorMessage")
@Expose
private String errorMessage;
@SerializedName("action")
@Expose
private Action action;

public String getUser() {
return user;
}

public void setUser(String user) {
this.user = user;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public String getErrorMessage() {
return errorMessage;
}

public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}

public Action getAction() {
return action;
}

public void setAction(Action action) {
this.action = action;
}

}
1 голос
/ 30 апреля 2019

Создайте свой HomeResponse класс со всем свойством, которое вы хотите от успеха и ошибки, как показано ниже.

class HomeResponse {
    String user;
    String age;
    String errorMessage;
    Action action;
}

Действие будет вашим другим классом.Вы просто проверяете errorMessage null или нет во время ответа.

0 голосов
/ 30 апреля 2019

Для этой формы правил данных ответов лучше создать базовый класс ответов:

class BaseResponse {
    String errorMessage;
    Action action;
    //ingore getters setters
}

и заставить другие классы ответов расширять его

class HomeResponse extend BaseResponse{
    String user;
    String age;
}

class OtherResp extend BaseResponse{
    String otherField;
}
...