改进2-URL 查询参数

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

我该怎么补救?

169242 次浏览

If you specify @GET("foobar?a=5"), then any @Query("b") must be appended using &, producing something like foobar?a=5&b=7.

If you specify @GET("foobar"), then the first @Query must be appended using ?, producing something like foobar?b=7.

That's how Retrofit works.

When you specify @GET("foobar?"), Retrofit thinks you already gave some query parameter, and appends more query parameters using &.

Remove the ?, and you will get the desired result.

I am new to retrofit and I am enjoying it. So here is a simple way to understand it for those that might want to query with more than one query: The ? and & are automatically added for you.

Interface:

 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)
}

It will be called this way. Considering you did the rest of the code already.

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

For example, when a query is returned, it will look like this.

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

Link to full project: Please star etc: https://github.com/Cosmos-it/ILoveZappos

If you found this useful, don't forget to star it please. :)

 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)


}

It will be called this way. Considering you did the rest of the code already.

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

For example when a query is returned, it will look like this.

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