2016-05-11 5 views
0

にJSON「データ」の配列を渡します。私はこのようにそれを行う場合は私が初めて改造2をしようとしていると私は、「データ」という名前jsonarrayから「カテゴリー」オブジェクトを得るためにそれを伝えるためにどのようには考えているレトロフィット2

方法1

それは失敗します。

@GET("category") 
Call<List<Category>> listCategories(); 

方法2

しかし、私は、 "カテゴリー" と呼ばれる新しいモデルを作るときにListを保持し、@SerializedName( "data")で注釈付けされていれば、完璧に動作します。

@GET("category") 
Call<Categories> listCategories(); 

私の質問は

私はこの

@GET("category") 
@Annotation to look inside "data" 
Call<List<Category>> listCategories(); 

のように、インターフェイスで何かに注釈を付けるべきか、私はレトロフィット(またはGSON) を伝えるために、私の "カテゴリー" のモデルに注釈を付けるべきですそれはjson配列 "data"の中に住んでいますか?

JSON

{"data":[{"id":1,"name":"Fist Name","parent":0},{"id":2,"name":"Second Name","parent":1}]} 
+0

(JSON) – Bharatesh

+0

質問更新され、おかげで自分の要求応答データを掲載!します。https:// – TomCB

+0

それだけの価値はありませんが、あなたは1) '一覧' 2のカスタムgsonデシリアライザを実装することができます)ここでhttps://github.com/square/okhttp/wiki/Interceptorsのようなものが詳細であるOkHttpインターセプタを使用しますgithub.com/square/retrofit/issues/261とhttps://github.com/square/retrofit/issues/197 – varren

答えて

1

方法2は正しいですし、我々はJSONレスポンスオブジェクト/配列のキー名(フィールド名)を定義/使用したいいけないときに我々はそれを使用します。代わりに私たち自身を提供してください。 など。以下のコードListのオブジェクト名はitemsですが、シリアライゼーションとデシリアライゼーションの間には@SerializedName注釈で定義されているものはdataです。

public class Categories { 

    //solution 1 
    List<Category> data;//object name must match with the json response 

    //solution 2 
    @SerializedName("data") 
    List<Category> items; 
} 

は私が

号があり、そのような注釈が利用できない、あなたが行うことができ、すべてが唯一のレスポンス型クラスであるインターフェースで何かに注釈を付けるべきです。

happyCoding;

関連する問題