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

问题描述 投票:0回答:3

服务器在成功的情况下发送响应(代码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(Retrofit's)封装Response(我自己的java类)。但是,我没有得到我想要的。

@GET("/screens/home")
Single<Reponse<HomeResponse>> getHome(@Query("langCode") String langCode);
android retrofit2 rx-java2
3个回答
1
投票

使用您想要的所有属性创建HomeResponse类,如下所示。

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

行动将是你的另一课。您只需在响应时检查errorMessage是否为null。


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

}

0
投票

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

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

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

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

class OtherResp extend BaseResponse{
    String otherField;
}
© www.soinside.com 2019 - 2024. All rights reserved.