2

サーバーから2つの異なる応答リクエストを取得できる場合、クラスをフォーマット/設計する方法は?

注: JSON 応答形式 (設計) がクラスと異なる場合、Retrofit は例外をスローします。JSON 応答のすべてのフィールドがクラスに存在する必要があります。

JSON 応答のような Java クラス:

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 に答える