最近,我尝试在我的项目中使用Rxjava和Retrofit。但我厌倦了服务器返回的不规则数据。例如,获取列表的接口可能会返回:
[
{"title":"title1","desc":"desc1"},
{"title":"title2","desc":"desc2"},
{"title":"title3","desc":"desc3"}
]
它可能会返回:
{"message":"error msg","status":"failed"}
因此,如果我使用Observable<Response<List<Entity>>>
来解析结果,当它返回JsonObject时,它将失败。反之亦然。
我想知道如何处理这种情况。
另一个界面返回的奇怪数据是:
{
"status":"success",
"message":"success msg",
"data":"{\"userName\":\"name\",\"userId\":\"2016\"}"
}
在这种情况下,我认为data
应该是JsonObject
,但它返回一个String,所以我不能使用
public class HttpResponse<T>{
private String status;
private String message;
private T data;
}
解析结果。因为它无法将字符串data
解析为User
实体
有没有办法解决这个问题?
答案 0 :(得分:0)
您可以使用
检查其对象或数组if (json instanceof JSONArray) {}
您可以修复的字符串问题将字符串转换为json
JsonObject jsonData = new JSONObject(data);
但最后服务器应该返回给你一致的数据,如果你无法控制服务器,试试这个解决方法。
答案 1 :(得分:0)
你可以使用OkHttp's application level interceptor并通过尝试将其解析为{"message":"error msg","status":"failed"}
对象来分析响应数据,如果它成功并且status
确实是failed
那么你可以抛出正确的消息和可能的正确类型的异常,这将导致Retrofit通过onError通知返回抛出的异常。