Android改造转换器异常

时间:2013-10-12 07:45:03

标签: android json exception retrofit

如果您可以从服务器获得2个不同的响应请求,如何格式化/设计您的课程?

注意:如果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;,它会起作用,但我不能,因为如果登录失败,它必须是一个字符串数组。

1 个答案:

答案 0 :(得分:2)

这与Retrofit无关。 Gson默认用于反序列化JSON响应。

由于您的服务器发回不一致的JSON结构,您应该使用TypeAdapter实例上的自定义Gson来处理此问题。

创建Gson实例(在此示例中为“gson”)后,您可以将其传递给Retrofit,如下所示:

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