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

相關文章
相關標籤/搜索