Retrofit2 POST запрос с параметрами

219
26 июля 2018, 13:00

Использую Retrofit2, хочу отправить на сервер POST параметры.

public interface ServerApi {
@GET("Singleton")
Call<String> getJSON();
@POST("Singleton")
Call<String> senDDudes(@Query("author") String author);
}

Использую этот интерфейс для отправки данных. При заходе на сервер данные получаются в POST формате, а потом возвращаются в JSON формате.

 Retrofit rt;
    rt=new Retrofit.Builder().baseUrl("http://10.0.2.2/").addConverterFactory(ScalarsConverterFactory.create()).addConverterFactory(GsonConverterFactory.create()).build();
    ServerApi sapi=rt.create(ServerApi.class);
    Call<String> msg=sapi.senDDudes("Dude","bude");
    msg.enqueue(new Callback<String>() {
        @Override
        public void onResponse(Call<String> call, Response<String> response) {
            System.out.println(response.body().toString());
        }
        @Override
        public void onFailure(Call<String> call, Throwable t) {
        System.out.println(t.toString());
        }
    });

Проблема в том, что данные в виде POST не приходят на сервер. Возврат есть, а вот приема нет. Проверяю с помощью echo $_POST['author'] на самом сервере.

НО если я использую вместо аннотации @POST аннотацию @GET, и вывожу соответственно echo $_GET['author'], данные выводятся.

В Retrofit я новичок, поэтому учитывайте пожалуйста это.

Answer 1

Параметр с аннотацией @Query управляет параметрами query запроса (как ни странно). Поэтому в php вы этот параметр можете достать с помощью $_GET (как известно, GET запрос не имеет тела, и логично что параметры запроса достаются из query url-a).

Чтобы отправить тело с POST-запросом:

interface Foo {
    // Вся соль здесь
    @POST("/path")
    FooResponse postJson(@Body FooRequest body);
}

Класс десериализованного тела запроса:

public class FooRequest {
  final String foo;
  final String bar;
  FooRequest(String foo, String bar) {
    this.foo = foo;
    this.bar = bar;
  }
}

Делаете запрос:

FooResponse = foo.postJson(new FooRequest("kit", "kat"));
READ ALSO
Как изменить способ позиционирования в ImageMagick?

Как изменить способ позиционирования в ImageMagick?

Хотелось бы задавать позиционирование текста (annotate) от верхнего левого края, а не от нижнего левого края

173
Отображение информации при выборе option в select box

Отображение информации при выборе option в select box

нужно организовать отображение картинки с описанием к нему при выборе option в select box, которое будет выводится слева от select

180
Изменение хеша в переменных

Изменение хеша в переменных

Есть хеш, который я генерирую функцией, после я помещаю его в таблицу с пользователями, после я использую команду setcookie и там присваиваю значения...

178
Unoconv презентации в pdf через PHP

Unoconv презентации в pdf через PHP

Пользуюсь софтом UnoConv на Ubuntu для конвертации файлов презентации (ppt, pptx, odt) в pdf далее в png

181