2013-10-12 44 views
2

如果您可以從服務器獲得2個不同的響應請求,如何格式化/設計您的類?Android翻新轉換器例外

注意:如果JSON響應格式(設計)與您的課程不同,那麼Retrofit將引發異常。來自JSON響應的所有字段都必須出現在您的班級中。

Java類,像JSON響應:

public class RequestResponseLogin 
{ 
    public ResponseLogin status; 

    public class ResponseLogin 
    { 
     public boolean success; 
     public List<String> message; 
    } 
} 

JSON響應:

{ 
    "status" : { 
        "success" : false 
        "message" : { 
            "Invalid credientials", 
            "....", 
            "...." 
           } 
       } 
} 

這是我的請求的響應:

interface iLogin 
{ 
    @GET 
    RequestResponseLogin loginUser(@Query("user") String user, @Query("pass") String pass); 
} 

// .... 
RequestResponseLogin response = data.loginUser("admin", "abc123"); 

如果登錄失敗,則public List<String> message;將來自Web服務器的消息填充:

message[0] = 'Invalid credentials'; 
message[1] = 'Invalid username'; 
message[2] = 'Password match correct'; 

但是,如果Web服務器不迴應任何事情(成功登錄),比我得到改造一個例外,因爲public List<String> message;是空的,Web服務器用一個簡單的空字符串消息進行回覆,而不是用字符串數組。如果我將public List<String> message;更改爲public String message;,它會起作用,但我不能這樣做,因爲如果登錄失敗,它必須是一個字符串數組。

回答

2

這與改造無關。 Gson默認情況下用於反序列化JSON響應。

由於您的服務器發回的JSON結構不一致,因此您應該使用Gson實例上的自定義TypeAdapter來處理此問題。

(在本例中爲「gson」)創建Gson實例之後,你可以通過它來改造這樣的:

RestAdapter ra = new RestAdapter.Builder() 
    // ... normal stuff ... 
    .setConverter(new GsonConverter(gson)) 
    .build();