在整个应用程序中,我从Web服务器请求JSON数据,并且响应几乎总是不同的。
例如,一个响应可能如下所示:
{"success":true,"data":{"token_id":"pPt9AKl0Cg","token_key":"8ax224sFrJZZkStAQuER"}}
而另一个可能看起来像这样:
{"success":true,"data":{"user_id":"20","username":"Bob"}}
另一个可能看起来像这样:
{"success":true,"data":{"user_id":"20","stats":{"followers":"500","following":"12"}}}
以前,我为每种不同的响应类型创建了一个模型类(Java)。例如,对于上面的第一个响应,我的模型类可能如下所示:
public class MyResponseModel {
private boolean success;
private DataModel data;
public static class DataModel {
private String token_id;
private String token_key;
}
...
}
这真的是最好的方法吗?因为如果我对我的应用程序中的十几个响应执行此操作,那么我将得到十二个以上不同的模型类,每个不同的响应一个。
有解析JSON的替代方法吗?
谢谢。
最佳答案
对于每种类型的响应,您将需要一个DTO或模型类。从json序列化/反序列化需要静态类型。您可以使用泛型来包装响应。重构代码将类似于:
public class MyResponseModel <T> {
private boolean success;
private T data;
}
public class DataModel {
private String token_id;
private String token_key;
}
然后,您的代码可以针对这种情况返回
MyResponseModel<DataModel>
对象。如果您确实想对每种类型的响应使用一个类,则需要将所有响应表示为键值对,然后可以使一个类包含一个Map。我不建议使用这种方法,而是希望针对每种类型的响应都设置一个类。