有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java改型2:@FormUrlEncoded带有默认字段

我需要发送一个带有application/x-www-form-urlencoded头的请求。响应是一些JSON格式的音乐专辑列表。可以有两个可选参数:total(默认值=5)和begin(默认值=0)

以下是我用于发送此请求的界面:

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

问题是,如何将默认值设置为这两个字段中的一个或两个字段,以便不必在每个请求中发送参数。例如,我想在每个请求中获得30个项目,只需使用begin字段即可。或者我想对这两个字段使用默认值:

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

这样,我得到一个错误:

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


共 (3) 个答案

  1. # 1 楼答案

    您必须像这样添加请求头:

     @Headers("Content-Type: application/x-www-form-urlencoded")
    

    这对我有用

  2. # 2 楼答案

    Call<List<Album>> listFeaturedAlbums(@Body CustomFields );
    
    class CustomFields {
     String total;
     String begin = 0;
     public CustomFields( String total ) {
       this.total = total;
     }
    ...
    getters&setters
    ..
    }
    
  3. # 3 楼答案

    目前我不认为你可以用一种非黑客的方式来做这件事

    改造团队正在努力添加此功能:Allow specifying default @Field values. #951

    当它完成时,您可以遵循此线程。或者帮助他们解决问题并提交PR:)