2015-09-09 7 views
10

application/x-www-form-urlencodedヘッダーでリクエストを送信する必要があります。レスポンスは、JSON形式の音楽アルバムのリストです。が存在することができる2つのオプションのパラメータ:Retrofit 2:デフォルトフィールドの@FormUrlEncoded

public interface MusicService { 
    @Headers("Accept: Application/JSON") 
    @FormUrlEncoded 
    @POST("album/featured-albums") 
    Call<List<Album>> listFeaturedAlbums(@Field("total") int total, @Field("begin") int begin); 
} 

質問:(デフォルト値= 5)と(デフォルト値= 0)ここで

が、私はこの要求を送信するために使用するインターフェイスがあるを開始私はどのようにこれらのフィールドのいずれかまたは両方にデフォルト値を設定することができます。そのため、各リクエストでパラメータを送信する必要はありません。たとえば、すべてのリクエストで30個のアイテムを取得し、ちょうど の開始フィールドで再生したいとします。それとも、私は両方のフィールドのデフォルト値を使用したい:私はあなたが非でそれを行うことができるとは思わない現時点で

java.lang.IllegalArgumentException: Form-encoded method must contain at least one @Field.

+0

Retrofit 2は、引数としてnullを渡すことをサポートしており、そのフィールドは含まれません。したがって、最初のインターフェイスはmMusicService.listFeaturedAlbums(null、null)になります。パラメータタイプとしてintの代わりにIntegerを使用する必要があります –

+0

私はこのオプションを知っています。これを行うためのより簡潔な方法はありませんか? –

+0

'@ Default'を使ってみましたか? @Default( "totalDefaultValue")(@Field( "total")int total' –

答えて

2

:これにより

public interface MusicService { 
    @Headers("Accept: Application/JSON") 
    @FormUrlEncoded 
    @POST("album/featured-albums") 
    Call<List<Album>> listFeaturedAlbums(); 
} 

、私はエラーを取得します - これはハッピーな方法です。改造で

Guysは、この機能を追加することに取り組んでいる:Allow specifying default @Field values. #951

それが完了しますときには、このスレッドに従うことができます。または、それらを手伝ってPRを提出してください。

関連する問題