2

如果您可以从服务器获得 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;,但我不能,因为如果登录失败,它必须是一个字符串数组。

4

1 回答 1

2

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

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

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

RestAdapter ra = new RestAdapter.Builder()
    // ... normal stuff ...
    .setConverter(new GsonConverter(gson))
    .build();
于 2013-10-15T04:08:47.503 回答