Модернизация: несколько параметров запроса в команде @GET?

Я использую Retrofit и Robospice для вызова API в приложении для Android. Все методы @POST работают отлично, поэтому команды @GET без каких-либо параметров в URL-адресе, но я не могу получить вызовы @GET для работы с параметрами в конце!

Например, если мой путь к API был «my / api / call /», и мне нужно было указать 2 параметра «param1» и «param2» в URL-адресе, вызов get будет выглядеть так:

http://www.example.com/my/api/call?param1=value1&param2=value2

Поэтому я установил свой интерфейс @GET так:

@GET("/my/api/call?param1={p1}&param2={p2}") Response getMyThing(@Path("p1") String param1, @Path("p2") String param2); 

Но я получаю сообщение об ошибке
«Исключение произошло во время выполнения запроса: строка запроса URL-адреса« /my/api/call?param1={p1}&param2={p2} »по методу getMyThing, возможно, не заменила блок».

Что я делаю не так?

Solutions Collecting From Web of "Модернизация: несколько параметров запроса в команде @GET?"

Вы должны использовать этот синтаксис:

 @GET("/my/API/call") Response getMyThing( @Query("param1") String param1, @Query("param2") String param2); 

Указание параметров запроса в URL-адресе выполняется только тогда, когда вы знаете как ключ, так и значение, и они исправлены.

Если у вас есть куча параметров GET, другой способ передать их в ваш URL-адрес – это HashMap.

 class YourActivity extends Activity { private static final String BASEPATH = "http://www.example.com"; private interface API { @GET("/thing") void getMyThing(@QueryMap Map<String, String>, new Callback<String> callback); } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); RestAdapter rest = new RestAdapter.Builder().setEndpoint(BASEPATH).build(); API service = rest.create(API.class); Map<String, String> params = new HashMap<String, String>(); params.put("foo", "bar"); params.put("baz", "qux"); // ... as much as you need. service.getMyThing(params, new Callback<String>() { // ... do some stuff here. }); } } 

URL-адрес будет http://www.example.com/thing/?foo=bar&baz=qux

Не указывайте параметры запроса в GET-URL. Делай это так:

 @GET("/my/api/call") Response getMyThing(@Query("param1") String param1, @Query("param2") String param2);