如何配置改造以转换成功/错误响应

时间:2019-04-30 05:30:14

标签: android retrofit2 rx-java2

服务器在成功的情况下发送响应(代码2xx):

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

如果失败(4xx),则会在errorBody中发送以下Json:

{
    "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(Retrofit的)封装Response(我自己的Java类)。但是,我没有得到想要的东西。

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

3 个答案:

答案 0 :(得分:1)

使您的 HomeResponse 类具有您希望从成功和错误中获得的所有属性,如下所示。

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

动作将是您的另一堂课。 您只需在响应时检查errorMessage为null即可。

答案 1 :(得分:1)

您可以使用此link进行pojo课堂, 在json中同时写入成功和错误响应字段,您将同时合并json和创建pojo类

您可以通过status或定义为error响应的内容检查响应

编辑

查看此

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;
}

}

答案 2 :(得分:0)

对于这种形式的响应数据规则,最好创建一个基本响应类:

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

并让您的其他响应类扩展它

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

class OtherResp extend BaseResponse{
    String otherField;
}