Аннотации Android: параметры запроса добавляются к URL-адресу?

@Get("/ServiceTest?version=1&dateRange={dateRange}")
ResponseModel getDateRangeTest(String dateRange);

в интерфейсе RestClient это делает следующее Get

http://localhost:8080/ServiceTest/2014-01-29%25202014-01-29?version=1" resulted in 400 (Bad Request); invoking error handler

Я делаю что-то неправильно при отправке параметров запроса.

Я хочу адрес таким образом:

/ServiceTest?version=1&dataRange=2014-01-29%25202014-01-29

Что в этом случае мне почему-то не удалось сгенерировать с помощью аннотаций Android @Get

Ответ: мои вызовы были неправильными, и основная проблема была с кодировкой uri, правильный

/ServiceTest?version=1&dataRange=2014-01-29%202014-01-29

person Navdeep Singh    schedule 04.02.2014    source источник


Ответы (1)


вы можете сделать неправильно.

Ваш сервер получает /ServiceTest
, но вы обращаетесь к серверу с адресом /ServiceTest/2014-01-29%25202014-01-29

Следите за тем, чтобы ваш сервер получал как /ServiceTest?version=1&dateRange={dateRange}, а {dataRange} — это то, что вы намереваетесь передать в качестве переменной.

Ваш адрес должен быть /ServiceTest?version=1&dataRange=2014-01-29%25202014-01-29

== ИЗМЕНИТЬ ==

Я не знаком с аннотацией Android Get, но попробуйте это.

@Get("/ServiceTest?version=1&dateStart={dateStart}&dateEnd={dateEnd}")
ResponseModel getDateRangeTest(String dateStart, String dateEnd);

и доступ с /ServiceTest?version=1&dataStart=2014-01-29&dateEnd=2014-01-29

Обратите внимание, что я меняю аргумент на более конкретный. и это был бы лучший подход.

person Youngjae    schedule 04.02.2014
comment
@NavdeepSingh // посмотри еще раз. Я добавил. - person Youngjae; 04.02.2014
comment
Это не тот случай. Android-аннотация является виновником. - person Navdeep Singh; 04.02.2014
comment
@NavdeepSingh // Вы пробовали с /ServiceTest?version=1&dataRange=2014-01-29%202014-01-29? См. %2520 и %20 различия в адресе. - person Youngjae; 04.02.2014
comment
да, этот закодированный URI, когда я отправляю пробел, должен быть преобразован в% 20, но здесь я вижу% 2520 - person Navdeep Singh; 04.02.2014
comment
@NavdeepSingh // вы можете проверить ссылку stackoverflow.com/q/16084935/361100. и почему бы вам вручную не заменить %2520 на %20? - person Youngjae; 04.02.2014
comment
Спасибо за этот случай, это еще одна проблема, аннотации Android автоматически кодируют строку ... но все же основная проблема сохраняется. - person Navdeep Singh; 04.02.2014
comment
@NavdeepSingh // рад это слышать :) - person Youngjae; 04.02.2014