改造2 - URL查询参数

时间:2016-04-19 21:46:47

标签: java android retrofit retrofit2

我使用查询参数来设置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

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:62)

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

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

这就是Retrofit的工作方式。

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

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

答案 1 :(得分:31)

我是新手,我正在享受它。因此,对于那些可能想要使用多个查询进行查询的人来说,这是一种简单的方法来理解它:和&amp;会自动为您添加。

接口:

 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 

答案 2 :(得分:2)

 public interface IService { 

  String BASE_URL = "https://api.demo.com/";

  @GET("Login") //i.e https://api.demo.com/Search? 
  Call<Products> getUserDetails(@Query("email") String emailID, @Query("password") String password)

} 

这将被称为。考虑到你已经完成了其余的代码。

Call<Results> call = service.authenticateUser("abc@gmail.com", "Password@123");

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

https://api.demo.com/Login?email=abc@gmail.com&password=Password@123