Gson字符串转实体的问题

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

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

这里的data是表示没有具体的数据,可是在Gson解析时咱们用来接受的数据倒是具体的实体对象,bean定义以下:ui

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应该是下面这种的:this

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

或者没有data,code

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


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

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使用。get

相关文章
相关标签/搜索