我正在使用Retrofit高效的网络库,但是无法处理包含单个前缀responseMessage
的动态JSON,该前缀会随机变为object
,在某些情况下(动态地)相同的前缀responseMessage
会变为字符串。
responseMessage
的Json格式对象:
{
"applicationType":"1",
"responseMessage":{
"surname":"Jhon",
"forename":" taylor",
"dob":"17081990",
"refNo":"3394909238490F",
"result":"Received"
}
}
responseMessage
的 JSON 格式会动态地变成字符串类型:
{
"applicationType":"4",
"responseMessage":"Success"
}
我的问题是,由于Retrofit具有内置的JSON
解析功能,我必须为每个请求分配单个POJO!但不幸的是,REST-API是建立在动态JSON
响应上的。前缀将在success(...)和failure(...)方法中随机从字符串更改为对象!
void doTrackRef(Map<String, String> paramsref2) {
RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint("http://192.168.100.44/RestDemo").build();
TrackerRefRequest userref = restAdapter.create(TrackerRefRequest.class);
userref.login(paramsref2,
new Callback<TrackerRefResponse>() {
@Override
public void success(
TrackerRefResponse trackdetailresponse,
Response response) {
Toast.makeText(TrackerActivity.this, "Success",
Toast.LENGTH_SHORT).show();
}
@Override
public void failure(RetrofitError retrofitError) {
Toast.makeText(TrackerActivity.this, "No internet",
Toast.LENGTH_SHORT).show();
}
});
}
普通Java对象:
public class TrackerRefResponse {
private String applicationType;
private String responseMessage; //String type
//private ResponseMessage responseMessage; //Object of type ResponseMessage
//Setters and Getters
}
在上述代码中,POJO TrackerRefResponse.java 中前缀 responseMessage 被设置为字符串或类型 responseMessage 的对象,所以我们可以创建具有相同名称(Java 基础知识 :))的 ref 变量的 POJO,因此我正在寻找用于 Retrofit 动态 JSON 的同一解决方案。我知道在普通的 HTTP 客户端中使用异步任务非常容易,但在 REST-API JSON 解析中不是最佳实践!从性能的角度来看,基准测试总是 Volley 或 Retrofit 是最佳选择,但我无法处理动态 JSON!可能的解决方案包括:
- 使用旧的异步任务与 HTTP 客户端解析。 :(
- 尝试说服 REST API 后端开发人员。
- 创建自定义 Retrofit 客户端 :)。