4

次のように定義された API エンドポイントがあります。

GET https://api-server.com/something/{id_or_ids}

ここidsで、単一のオブジェクト IDまたはIDのコンマ区切りリストを指定できます。
例えば
https://api-server.com/something/abcd1234
https://api-server.com/something/abcd1234,abcd4567,gdht64332

単一の IDが指定された場合(および一致するオブジェクトが見つかった場合)、json オブジェクトが返されます。
{ "blah" : "blah" }

複数の IDが指定されている場合、 json 配列で応答を取得します。
[{"blah1":"bleh"}, {"blah2":"meh"}, {"blah3":"blah"}]

私は現在、これを 2 つの方法として実装する必要があると考えています (1 つの方法で実行できますか?)。

単一の IDを取り、単一のオブジェクトを返すもの:

@GET("/something/{id}")
void getObject (@Path("id") String objectId, Callback<MyObject> callback)

複数の IDを取り、オブジェクトの配列を返すもの

@GET("/something/{ids}")
void getObject (Callback<MyObject[]> callback,@Path("ids") String ... objectIds)

2 番目のメソッドvarargsをフィードし、それらを id フィールドに連結する方法はありますか?

ありがとう

4

1 に答える 1

4

Retrofit は、パス内の文字列を結合する方法を認識できません。|コンマは当たり前のように思えますが、パイプ ( ) やコロン ( ) などを必要とする理由はありません:

この事実のため、私たちは何もせず、あなたの選択に頼っています.

これには 2 つの解決策があります。

  • String引数の型として使用し、呼び出しサイトで結合します。例えば:

    foo.getObject(Joiner.on(',').join(things));
    
  • toString()メソッドが 1 つまたは複数のオブジェクトの正しい形式を返すことを処理するカスタム オブジェクトを使用します。

于 2014-02-07T20:28:34.720 に答える