2016-04-19 5 views
15

Я использую параметры запроса для установки значений, необходимых API Карт Google.Retrofit 2 - URL Query Parameter

Проблема: мне не нужен знак & для первого параметра запроса.

@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 

Как это исправить?

ответ

20

Если вы укажете @GET("foobar?a=5"), то необходимо добавить @Query("b"), используя &, производя что-то вроде foobar?a=5&b=7.

Если вы укажете @GET("foobar"), тогда необходимо добавить @Query, используя ?, производя что-то вроде foobar?b=7.

Вот как работает Модернизация.

При указании @GET("foobar?"), Переоборудование думает, что вы уже дали некоторый параметр запроса, и добавляет более параметры запроса с использованием &.

Удалите ?, и вы получите желаемый результат.

+0

это работает. У вас есть какие-то хорошие ресурсы по структурированию URL-адресов и всем типам параметров? Я не уверен, какое хорошее ключевое слово для поиска. – Alan

+1

Найдите 'URL', и вы найдете https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax – Andreas

7

Я новичок в дооснащении, и мне это нравится. Итак, вот простой способ понять это для тех, кто может запросить несколько запросов:? и & автоматически добавляются для вас.

Интерфейс:

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 
0

общедоступный интерфейс 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 call = service.authenticateUser ("[email protected]", "Пароль @ 123");

Например, когда запрос возвращается, он будет выглядеть следующим образом.

// ->https://api.demo.com/[email protected]&[email protected]