如何使用 Retrofit2 解析错误响应?
How to parse an error response with Retrofit2?
我能够解析成功的 200 响应,对于 GoodData 的 pojo 没有问题。但是在 412 上,我想解析响应以获取它的数据 returns 以便我可以用它做一些事情。
我有一个 Pojo BadResponseData 但获取它的响应主体时它始终为空。我试过使用转换器,但这需要有一个我似乎无法获得的改造实例才能工作。我错过了什么?我在 Android 文档中找不到任何帮助我理解其工作原理的内容。
例如:
public void onResponse(Call<CheckInData> call, Response<GoodData> response) {
if (response.isSuccessful()) {
GoodData goodData = response.body();
if (goodData!= null) {
//do something
}
} else {
BadResponseData badResponseData = response.body();
//badResponseData is always null!! Why?
}
…
json 返回 412:
{
“dataToUse”: {
“@name”: “A Name”,
“@date”: "2017-12-11T18:00:00-05:00"
},
"serviceErrors": {
"code": "0",
"fields": “required.data.not.found”,
"message": “name”
}
}
还有我的 pojo 类:
public class BadResponseData {
private DataToUse dataToUse;
public DataToUse getDataToUse() { return this.dataToUse; }
public void setDataToUse(DataToUse dataToUse) { this.dataToUse = dataToUse; }
private ServiceErrors serviceErrors;
public ServiceErrors getServiceErrors() { return this.serviceErrors; }
public void setServiceErrors(ServiceErrors serviceErrors) { this.serviceErrors = serviceErrors; }
}
public class DataToUse {
private String name;
public String getName() { return this.name; }
public void setName(String name) { this.name = name; }
private Date date;
public Date getDate() { return this.date; }
public void setDate(Date date) { this.date = date; }
}
public class ServiceErrors {
private String code;
public String getCode() { return this.code; }
public void setCode(String code) { this.code = code; }
private String fields;
public String getFields() { return this.fields; }
public void setFields(String fields) { this.fields = fields; }
private String message;
public String getMessage() { return this.message; }
public void setMessage(String message) { this.message = message; }
}
您可以使用 response.errorBody()
并解析 json:
ResponseBody errorBody = response.errorBody();
if (errorBody != null){
BadResponseData error = new Gson().fromJson(errorBody.charStream(), BadResponseData.class);
}
我能够解析成功的 200 响应,对于 GoodData 的 pojo 没有问题。但是在 412 上,我想解析响应以获取它的数据 returns 以便我可以用它做一些事情。
我有一个 Pojo BadResponseData 但获取它的响应主体时它始终为空。我试过使用转换器,但这需要有一个我似乎无法获得的改造实例才能工作。我错过了什么?我在 Android 文档中找不到任何帮助我理解其工作原理的内容。
例如:
public void onResponse(Call<CheckInData> call, Response<GoodData> response) {
if (response.isSuccessful()) {
GoodData goodData = response.body();
if (goodData!= null) {
//do something
}
} else {
BadResponseData badResponseData = response.body();
//badResponseData is always null!! Why?
}
…
json 返回 412:
{
“dataToUse”: {
“@name”: “A Name”,
“@date”: "2017-12-11T18:00:00-05:00"
},
"serviceErrors": {
"code": "0",
"fields": “required.data.not.found”,
"message": “name”
}
}
还有我的 pojo 类:
public class BadResponseData {
private DataToUse dataToUse;
public DataToUse getDataToUse() { return this.dataToUse; }
public void setDataToUse(DataToUse dataToUse) { this.dataToUse = dataToUse; }
private ServiceErrors serviceErrors;
public ServiceErrors getServiceErrors() { return this.serviceErrors; }
public void setServiceErrors(ServiceErrors serviceErrors) { this.serviceErrors = serviceErrors; }
}
public class DataToUse {
private String name;
public String getName() { return this.name; }
public void setName(String name) { this.name = name; }
private Date date;
public Date getDate() { return this.date; }
public void setDate(Date date) { this.date = date; }
}
public class ServiceErrors {
private String code;
public String getCode() { return this.code; }
public void setCode(String code) { this.code = code; }
private String fields;
public String getFields() { return this.fields; }
public void setFields(String fields) { this.fields = fields; }
private String message;
public String getMessage() { return this.message; }
public void setMessage(String message) { this.message = message; }
}
您可以使用 response.errorBody()
并解析 json:
ResponseBody errorBody = response.errorBody();
if (errorBody != null){
BadResponseData error = new Gson().fromJson(errorBody.charStream(), BadResponseData.class);
}