Retrofit: plusieurs paramètres de requête dans la commande @GET?
J'utilise Retrofit et Robospice pour faire des appels API dans mon application android. Toutes les méthodes @POST fonctionnent très bien, tout comme les commandes @GET sans aucun paramètre dans L'URL, mais je ne peux pas obtenir d'appels @GET pour travailler avec des paramètres à la fin!
par exemple, si mon chemin D'API était "my / api / call/" et que je voulais 2 paramètres "param1" et "param2" dans L'URL, l'appel get ressemblerait à:
http://www.example.com/my/api/call?param1=value1¶m2=value2
donc j'ai configuré mon interface @GET comme ceci:
@GET("/my/api/call?param1={p1}¶m2={p2}")
Response getMyThing(@Path("p1")
String param1, @Path("p2")
String param2);
mais je reçois une erreur disant
" une exception s'est produite pendant l'exécution de la requête réseau : URL query string " /my/api/call?param1={p1}¶m2={p2}
" sur la méthode getMyThing peut ne pas avoir remplacé le bloc."
Qu'est-ce que je fais de mal?
3 réponses
vous devriez utiliser cette syntaxe:
@GET("/my/API/call")
Response getMyThing(
@Query("param1") String param1,
@Query("param2") String param2);
spécifier les paramètres de requête dans L'URL est seulement pour quand vous connaissez à la fois la clé et la valeur et ils sont fixés.
si vous avez un tas de Params GET, une autre façon de les passer dans votre url est un HashMap.
class YourActivity extends Activity {
private static final String BASEPATH = "http://www.example.com";
private interface API {
@GET("/thing")
void getMyThing(@QueryMap Map<String, String>, new Callback<String> callback);
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
RestAdapter rest = new RestAdapter.Builder().setEndpoint(BASEPATH).build();
API service = rest.create(API.class);
Map<String, String> params = new HashMap<String, String>();
params.put("foo", "bar");
params.put("baz", "qux");
// ... as much as you need.
service.getMyThing(params, new Callback<String>() {
// ... do some stuff here.
});
}
}
L'URL appelée sera http://www.example.com/thing/?foo=bar&baz=qux
N'écrivez pas vos paramètres de requête dans GET-URL. Faites comme ceci:
@GET("/my/api/call")
Response getMyThing(@Query("param1")
String param1, @Query("param2")
String param2);