2016-01-29 4 views
4

J'ai un nouveau projet Android sur lequel je travaille, et Retrofit2 fonctionne bien pour moi. Cependant, j'ai une url que je dois frapper, avec l'une des deux chaînes, en plus des données que j'envoie.Retrofit2 Données de formulaire codées statiques?

En ce moment, il ressemble à ceci:

@FormUrlEncoded 
@POST("token") 
Call<AccessResponse> requestAccess(@Field("grant_type") String type, @Field("code") String authCode, @Field("client_id") String ApiKey); 

le type de subvention est seulement l'une des deux choses, et je voudrais abstraire loin, en urls statiques, comme ceci:

@FormUrlEncoded 
@POST("token") 
@Field("grant_type","type1") 
Call<AccessResponse> requestAccess(@Field("code") String authCode, @Field("client_id") String ApiKey); 

@FormUrlEncoded 
@POST("token") 
@Field("grant_type","type2") 
Call<AccessResponse> refreshAccess(@Field("code") String authCode, @Field("client_id") String ApiKey); 

Y a-t-il un moyen d'accomplir cela? mes 2 jours de google-fu n'ont pas fonctionné pour moi, ni ont parcouru les docs et le code d'API. Je ne veux pas avoir à suivre la bonne chaîne dans les différents endroits de mon code.

Répondre

0

Il s'avère que la réponse est "Vous ne pouvez pas maintenant".

Il y a un open issue on Github pour la demande de fonctionnalité

Il y a une autre approche, un objet FieldMap avec un exemple de méthode comme mentionné dans this SO post, mais ce n'est pas exactement ce que je cherchais, et surpuissant pour un seul champ.

+0

On dirait qu'ils ne seront jamais soutenir non plus. Huer. Jake Wharton me laisse tomber. – mix3d

0

Le Retrofit RequestInterceptor pourrait-il faire le travail? Il peut injecter des paramètres dans chaque demande ... donc à partir de là, vous pourriez peut-être écrire une méthode qui injecte le bon paramètre en fonction de ce que vous essayez de faire ...

RequestInterceptor requestInterceptor = new RequestInterceptor() { 
     @Override 
     public void intercept(RequestFacade request) { 
      request.addQueryParam("grant_type", getGrantType()); 
     } 
}; 
private String getGrantType() 
{ 
    // do your stuff and : 
    return "type1"; // or "type2" 
} 
+0

Si je faisais des paramètres de requête cela pourrait fonctionner, mais qu'en est-il de l'ajout de données de formulaire? – mix3d

+0

Les paramètres de requête peuvent être ajoutés directement via la définition @GET, en fonction de leurs documents, comme '@GET (" users/list? Param = static "), mais cela n'aide pas l'objectif des données de formulaire. Comme les états de demande de fonctionnalité sur github, il n'y a pas encore un moyen facile de le faire. – mix3d