所以我想解析服务器的响应。目的是构建统一的系统,它将接收响应并构建对象,而不是将其序列化。
服务器有4种类型的响应:
类型1 :items是具有两个或更多键值项的对象数组;
{
"response": {
"count": 1,
"items": [
{
"id": 456239048,
"key1": "value_1",
"key2": "value_2"
}
]
}
}
类型2 :项目还可以有另一个内部对象,例如city;
{
"response": {
"count": 923,
"items": [
{
"id": 1,
"first_name": "Test",
"last_name": "Test",
"city": {
"id": 2,
"title": "city1"
}
},
{
"id": 2,
"first_name": "Test2",
"last_name": "Test2"
}
]
}
}
最后是最后两种类型的回应:
{
"response": [
{
"id": 1
}
]
}
第二个
{
"error": {
"error_code": 14
}
}
它们是服务器条件的响应等等。
所以我实现了几个类来实现我的目标。 还有更多时间: - 序列化和反序列化(json1 => object => json2; json1 = json2); - 访问对象方法和值。
public class DataModelDeserializer<T> implements JsonDeserializer<T> {
@Override
public T deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
JsonElement items=null;
try{
items = jsonElement.getAsJsonObject();
}catch (Exception e){
e.printStackTrace();
}
return new Gson().fromJson(items, type);
}
}
DataModel.java
public class DataModel {
private Response response;
public Response getResponse() {
return response;
}
public void setResponse(Response response) {
this.response = response;
}
}
Response.java
public class Response<T> {
private int count;
private List<T> items=new ArrayList<T>();
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public List<T> getItems() {
return items;
}
public void setItems(List<T> items) {
this.items = items;
}
}
Items.java
public class Items {
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
从一个好消息开始 - 这种方法帮助我实现了第一个目标 - 隐藏json来反对和反击。 Hovewer我无法访问Items对象的值;我收到一个错误:
线程“main”中的异常java.lang.ClassCastException:com.google.gson.internal.StringMap无法强制转换为com.app.Items
是的,我认为这种方法并不是很好,因为我遇到了如何确定响应类型的问题。
感谢。
答案 0 :(得分:1)
将响应格式更改为响应类型的标准格式。
{
"success":"true",
"responseData": {
// your data here
},
"errorMessage": "only set if success == false",
"errorData": {
// any error data here
}
}
然后,您可以对所有类型的响应使用相同的解析逻辑,同时提前知道基于success
字段的值的响应类型。