2014-11-02 13 views
8

मैं एक वास्तविक पैरामीटर के साथ एक सरल पोस्ट अनुरोध भेजा करना चाहते हैं: लेकिनरेट्रोफिट: निरंतर फ़ील्ड के साथ POST अनुरोध कैसे भेजें?

@POST("/token") 
@FormUrlEncoded 
void extendSession(@Field("refresh_token")final String refreshToken); 

इस अनुरोध को भी सर्वर द्वारा अनुरोध कुछ निरंतर मूल्यों भेजना चाहिए जैसे client_id, client_secret और grant_type जो लगातार कर रहे हैं और हिस्सा नहीं होना चाहिए आवेदन एपीआई के।

ऐसा करने का सबसे अच्छा तरीका क्या है?

उत्तर

8

यह आपके दृष्टिकोण का विषय है। यदि आपके पास स्थिरांक है तो आप अपने कॉल के लिए आवश्यक मानों का एक डिफ़ॉल्ट मानचित्र बना सकते हैं। @FieldMap अपने सभी आवश्यक फ़ील्ड

private void extendSession(String token){ 
    Map params = buildDefaultParams(); 
    params.put("refreshToken", token); 
    getRestAdapter().create(MyApi.class).extendsSession(params); 
} 
private Map buildDefaultParams(){ 
    Map defaults = new HashMap(); 
    defaults.put("client_id", CLIENT_ID); 
    defaults.put("client_secret", CLIENT_SECRET); 
    defaults.put("grant_type", GRANT_TYPE); 
    return defaults; 
} 
    /**then you change your interface to this **/ 
    @POST("/token") 
    @FormUrlEncoded 
    void extendSession(@FieldMap() Map refreshToken); 
+3

यही वह है जो मैंने किया, हालांकि यह एक "सुरुचिपूर्ण" समाधान नहीं है। –

+1

गिथूब पर एक लंबित मुद्दा है, और मैंने इस पोस्ट को भी वहां से जोड़ा है। https://github.com/square/retrofit/issues/951 –

1

आप इस के लिए Java Method Invocation Builder उपयोग कर सकते हैं के साथ एक मानचित्र के निर्माण के लिए उपयुक्त हो जाएगा।

@GenerateMethodInvocationBuilder 
public interface ServiceApi { 
@POST("/token") 
@FormUrlEncoded 
void extendSession(
    @Default("theToken") @Field("refresh_token") final String refreshToken, 
    @Default("theId") @Field("client_id") final String clientId, 
    @Default("theSecret") @Field("client_secret") final String clientSecret, 
    @Default("theType") @Field("grant_type") final String grantType); 
} 

और फिर आप की तरह एपीआई आह्वान कर सकते हैं:

ServiceApiExtendedSessionBuilder.extendedSession() 
.withRefreshToken("theRefreshToken") 
.invoke(serviceApi); 
0

के बजाय एक String, अपने इंटरफेस एक GrantType वस्तु जो विभिन्न grant_type रों के लिए कारखाने के तरीकों है स्वीकार कर सकता है। ये कारखाने के तरीके client_id, client_secret, और grant_type फ़ील्ड सेट करेंगे।

@POST("/oauth/token") 
Call<Token> extendSession(@Body GrantType grantType); 
संबंधित मुद्दे