我正在呼叫一个端点,该端点以两种不同的格式发送响应:
{ field1: VALUE, field2: VALUE }
(如果响应代码为2XX){ message: ERROR_MESSAGE }
(如果响应代码为4XX)我正在使用的POJO:
data class MyResponse(
@SerializedName("field1") field1: String?,
@SerializedName("field2") field2: String?,
@SerializedName("message") message: String?
)
我正在使用RxJava2CallAdapter
,因此,我的服务界面如下:
interface MyService {
@POST(...)
fun makeCall(@Body body: JsonObject): Single<MyResponse>
}
问题是,如果响应代码为4XX,则出现错误,而不是仅填充MyResponse
字段的message
对象。
我想要的是一种使状态代码为:
field1
和field2
message
当我订阅makeCall()
的返回值时
答案 0 :(得分:0)
您的响应中包含一个errorBody
值。因此,在您的回复中,您需要执行以下操作:
if(response.code() == 200) {
//Success, continue as normal with your POJO
} else {
ResponseBody errorBody = response.errorBody();
}
errorBody
可以转换为其中包含您的{ message: ERROR_MESSAGE }
的JSON对象。
try {
JSONObject object = new JSONObject(errorBody.string());
errorMessage = object.getString("message");
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}