这里遇到一个比较棘手的问题,原来项目中使用的不是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