2014-09-29 5 views
6

Ich habe eine Liste mit Diensten angefordert, die für den Benutzer aktiviert sind.Dynamische Hinzufügen von Abfrageparametern ohne Wert zur Nachrüstanforderung

Anfrage hat folgendes Format:

https://myserver.com/setservices?param1=val1&param2=val2&service[10]&service[1000]&service[10000]

Liste der Service-Parameter ("Service [10] & service [1000] & service [10000]") dynamisch erstellt wird und jeder Parameter nicht über Wert. Ist es möglich, dies mit Retrofit zu erreichen?

Antwort

15

Vom retrofit documentation:

Für komplexe Abfrage Parameterkombinationen ein Map verwendet werden kann.

@GET("/group/{id}/users") 
List<User> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options); 

Ich denke, das macht, was Sie erreichen wollen.

+0

@QueryMap erlaubt keine Abfrageparameter ohne Wert enthalten. Aus der Dokumentation: "Werte sind URL-codiert und Null enthält nicht den Abfrageparameter in der URL" –

+1

Was ist mit leeren Zeichenfolgen? – WojciechKo

+0

Es produziert URL mit Gleichheitszeichen: https://myserver.com/setservices?service[100]=&service[10000]=&service[10]= Aber Server versteht es gut. –

5

Ich habe Workaround gefunden, wie dies zu tun ist.

@GET("/setservices{services_query}") 
ServicesSetResponse setServices(@EncodedPath("services_query") String servicesQuery); 

Und dann:

getService().setServices("?param1=val1&param2=val2" + "&services[10]&services[100000]&services[1000000]") 
Verwandte Themen