2013-03-17 51 views
2

我有一個webservice,它爲每個請求返回相同的通用容器以及一些基本信息。例如,請求用戶的列表將會給我下面的響應:使用GSON反序列化具有特定對象的通用容器

{ 
    "error":false, 
    "message":"Message goes here", 
    "items":[ 
     { 
     "id":1, 
     "name":"Test User 1" 
     }, 
     { 
     "id":2, 
     "name":"Test User 2" 
     } 
    ] 
} 

當請求不同的資源,只有項目的列表將有所不同:

{ 
    "error":false, 
    "message":"Message goes here", 
    "items":[ 
     { 
     "id":3, 
     "artist":"Artist 1", 
     "year":2001 
     }, 
     { 
     "id":4, 
     "artist":"Artist 2", 
     "year":1980 
     } 
    ] 
} 

在我的客戶我要地圖使用GSON對Java對象的響應:

public class ArtistRestResponse { 
    private boolean error; 
    private String message = ""; 
    private Artist[] items;  
} 

然而,重構公共字段,並讓我從每個資源創建類,它會創建一個合乎邏輯的步驟一個一般類型RestResponse<T>類:

public class RestResponse<T> { 
    private boolean error; 
    private String message = ""; 
    private T[] items;   
} 

的問題是,這是不可能使用RestResponse<Artist> = new Gson().fromJson(json, RestResponse<Artist>.class);。 有什麼方法可以使用這樣的構造,還是有更好的方法來處理服務器響應?

回答

2

您應該在這裏使用TypeToken

final TypeToken<RestResponse<Artist>> token = new TypeToken<RestResponse<Artist>>() {}; 
final Type type = token.getType(); 
final Gson gson = new Gson(); 

final RestResponse<Artist> response = gson.fromJson(json, type); 
相關問題