2017-11-01 6 views
1

せずに失敗します。改修:ジャクソンとの直列化復元は私が残り-APIを呼び出すために使用し、次のコードを持っているすべてのエラー

public static Retrofit getClient() { 
    ObjectMapper mapper = new ObjectMapper(); 
    return new Retrofit.Builder() 
      .baseUrl(getBaseUrl()) 
      .addConverterFactory(JacksonConverterFactory.create(mapper)) 
      .build(); 
} 
:サービス

Retrofit client = Client.getClient(); 
Call<ResponseBeanOutput<UserBeanOutput>> call = client.create(AuthResource.class).login("username","password","true"); 
Response<ResponseBeanOutput<UserBeanOutput>> response = call.execute(); 

クライアントが静的メソッドを介してobteinedされます私は一般的なオブジェクトのRESPONSにこの応答をマップする必要が

{ 
    "error": false, 
    "message": "Successfull login", 
    "errorCode": 0, 
    "data": { 
     "uid": 7, 
     "email": "[email protected]", 
     "name": "username", 
     "nick": "usernick", 
     "photoUrl": "media/profiles/defaultImageProfile.png", 
     "lts": "aaaaeqc9lf9od82rk633aaaaa" 
    } 
} 

Serverは、次のようにJSONでレスポンスを送信しますUserBeanOutput型のフィールド(データ)を含むeBeanOutput(jsonオブジェクト内のオブジェクト "data"をマッピングする)したがって、ResponseBeanOutputは "error"、 "message"、 "errorCode"フィールドをマップし、データは "uid"、 "email"、 "nick"などを含む "UserBeanOutput"タイプのオブジェクトになります。

問題はすべてのオブジェクトが空(null)で、エラーがないことです。

また、ResponseBeanOutputからジェネリック型を削除し、レスポンスをフィールド「エラー」と「メッセージ」を持つ単純なBeanでマッピングしました。

私は間違っていますか?

+1

Retrofitをデバッグしようとしましたか?私が期待しているように第三者の図書館がなぜうまくいかないのか理解できないときは、ほとんどの場合私にとってうまくいきます。 .execute()メソッドの先頭にブレークポイントを置いて、その理由を見つけることができます。 –

答えて

0

@ Yevhenii Semenov、debugging execute()メソッドの提案に基づいて問題を解決しました。私は、この問題が応答で本文を返さなかったAPIにあることを発見しました。このため、逆シリアル化はnullです。 クライアントを初期化するためのコードは正常でした。

ありがとうございました

関連する問題