改造 2 - URL 查询参数

2022-08-31 10:48:30

我正在使用查询参数来设置Google Maps API所需的值。

问题是我不需要第一个查询参数的符号。&

@GET("/maps/api/geocode/json?")
    Call<JsonObject> getLocationInfo(@Query("address") String zipCode,
                                             @Query("sensor") boolean sensor,
                                             @Query("client") String client,
                                             @Query("signature") String signature);

改造产生:

&address=90210&sensor=false&client=gme-client&signature=signkey

这导致调用失败,当我需要它

address=90210&sensor=false&client=gme-client&signature=signkey

如何解决此问题?


答案 1

如果指定 ,则必须使用 追加任何值,生成类似 的内容。@GET("foobar?a=5")@Query("b")&foobar?a=5&b=7

如果指定 ,则必须使用 追加第一个,生成类似 的内容。@GET("foobar")@Query?foobar?b=7

这就是改造的工作原理。

指定 时,Retrofit 认为您已经提供了一些查询参数,并使用 追加更多查询参数。@GET("foobar?")&

删除 ,您将获得所需的结果。?


答案 2

我是改造的新手,我很享受它。因此,对于那些可能想要使用多个查询进行查询的人来说,这里有一个简单的方法来理解它:?和和自动为您添加。

接口:

 public interface IService {

      String BASE_URL = "https://api.test.com/";
      String API_KEY = "SFSDF24242353434";

      @GET("Search") //i.e https://api.test.com/Search?
      Call<Products> getProducts(@Query("one") String one, @Query("two") String two,    
                                @Query("key") String key)
}

它将以这种方式命名。考虑到你已经完成了其余的代码。

  Call<Results> call = service.productList("Whatever", "here", IService.API_KEY);

例如,当返回查询时,它将如下所示。

//-> https://api.test.com/Search?one=Whatever&two=here&key=SFSDF24242353434 

链接到完整项目:请加注等:https://github.com/Cosmos-it/ILoveZappos

如果您发现这很有用,请不要忘记为它加注星标。:)


推荐