Gson字符串转实体的问题

这里遇到一个比较棘手的问题,原来项目中使用的不是Gson,客户端在请求json数据时如果没有具体的数据内容会返回空字符串,如:

{"result":{"errorMessage":"用户名/密码错误","errorCode":0},"data":""}

这里的data是表示没有具体的数据,但是在Gson解析时我们用来接受的数据却是具体的实体对象,bean定义如下:

public class Result<T extends BaseEntity> implements Serializable {

    private static final long serialVersionUID = -645821020648740998L;
    private Status result;
    private T data;


    public Status getResult() {
        return result;
    }

    public void setResult(Status result) {
        this.result = result;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}

所以这里在解析的时候就会报一个错误,大体内容是:解析到了一个String,但期望的是一个对象,start with ‘{’,也就是说我们的json应该是下面这种的:

{"result":{"errorMessage":"用户名/密码错误","errorCode":0},"data":null}

或者没有data,

{"result":{"errorMessage":"用户名/密码错误","errorCode":0}}


这里无法修改服务端的代码,所以只能在客户端对获取的数据进行转换,转换的方法是:

JsonObject obj = new JsonParser().parse(json_str).getAsJsonObject();
if (obj.get("data").toString().equals("\"\"")){
    obj.remove("data");
}
Result<User> result;
Gson _g = new GsonBuilder().serializeNulls().create();
result = _g.fromJson(obj,new TypeToken<Result<User>>(){}.getType());

通过一个中间对象,JsonObject将data为空的json去除掉相应的data项。


详见参考JsonElement使用。

你可能感兴趣的:(gson)