java - запрос - scalars retrofit




HTTP GET с телом запроса RETROFIT (2)

Я использую Retrofit, чтобы сделать вызовы API в моем приложении для Android. Я должен представить @Body of JSON

@GET("api/")
void getData(@Body UserPostRequestBody request)

Я получаю сообщение об ошибке

retrofit.RetrofitError: apiCall: Non-body HTTP method cannot contain @Body or @TypedOutput.

У тебя есть идеи?


Определение GET, как объяснено here в этом ответе, объясняет, что тело не должно ничего значить, поэтому Retrofit не позволяет вам добавлять тело. Тем не менее, это неправда, что сервер должен следовать этому формату. Для сервера вполне возможно иметь конечную точку GET, которая не только принимает, но ТРЕБУЕТ тело. Это была бы «плохая» архитектура, но для Retrofit кажется немного глупым ограничивать то, что библиотека может делать излишне.

Кроме того, различные методы HTTP имеют разные определения того, что они должны делать. Например, GET получает информацию, POST создает новую запись / объект, предоставляя информацию серверу, PUT обновляет существующую запись / объект и т. Д. Проблема в том, что самый простой способ передать сложные данные на сервер, особенно при использовании Модификация осуществляется с помощью JSON. Таким образом, идеальный способ получить информацию с сервера при наличии сложного фильтра - это отправить тело JSON вместе с запросом GET. К сожалению, нет метода HTTP-запроса, который позволяет это в соответствии со спецификацией.


Чтобы отправить данные вместе с Get Request вы можете сделать следующее:

//sending data as a url parameter
@GET("/group/{id}/users")
List<User> groupList(@Path("id") int groupId);

как сказано в этом ответе SO , семантика сервера для GET, однако, ограничена таким образом, что тело, если оно есть, не имеет семантического значения для запроса - Рой Филдинг.







retrofit