Модернизация: как отправить запрос POST с постоянными полями?

Я хочу отправить простой запрос POST с одним фактическим параметром:

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

Но этот запрос также должен отправлять некоторые постоянные значения, запрошенные сервером, такие как client_id , client_secret и grant_type которые являются постоянными и не должны быть частью API приложения.

Каков наилучший способ сделать это?

Solutions Collecting From Web of "Модернизация: как отправить запрос POST с постоянными полями?"

Это вопрос вашего подхода. Если у вас есть константы, вы можете создать карту значений по умолчанию, необходимую для вашего вызова. @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); 

Для этого вы можете использовать Java Invoice 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); } 

И тогда вы можете вызвать api как:

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

Вместо String ваш интерфейс может принимать объект GrantType который имеет фабричные методы для разных grant_type . Эти заводские методы будут устанавливать client_id , client_secret и grant_type .

 @POST("/oauth/token") Call<Token> extendSession(@Body GrantType grantType);