這裏遇到一個比較棘手的問題,原來項目中使用的不是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