Как отправить тело запроса в дооснащении вызова? - PullRequest
1 голос
/ 21 февраля 2020

У меня есть этот вызов, определенный в классе обслуживания

@POST("enquiries/")
Call<Enquiry> postEnquiry(
        @Header("Authorization") String token,
        @Body RequestBody body
);

, и когда я действительно вызываю его в своем файле репозитория:

RequestBody body = requestBody.build();
    enquiriesService.postEnquiry(token, body).enqueue(new Callback<Enquiry>() {...

При проверке исходящих сетевых вызовов я обнаружил, что тело исходящего запроса пусто.

Как отправить объект RequestBody в теле запроса?

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Что вы подразумеваете под посылкой? Ваш код уже отправляет тело запроса и токен.

Вы всегда можете использовать HttpLoggingInterceptor для регистрации вашего запроса в Logcat https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor

val apiService: ApiService
        get() = setupInstance().create(ApiService::class.java)

private fun setupInstance(): Retrofit {

        return Retrofit.Builder()
                .baseUrl("BASE_URL")
                .client(createClient())
                .addCallAdapterFactory(CoroutineCallAdapterFactory())
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build()
}

private fun createClient(): OkHttpClient {
        val logging = HttpLoggingInterceptor()
        HttpLoggingInterceptor.Level.BODY

        return OkHttpClient.Builder()
                .connectTimeout(60, TimeUnit.SECONDS)
                .readTimeout(60, TimeUnit.SECONDS)
                .writeTimeout(60, TimeUnit.SECONDS)
                .build()
}
0 голосов
/ 22 февраля 2020

Вы можете использовать класс Model для отправки тела вашего запроса.

Например,

// Task.java
public class Task {  
    private long id;
    private String text;

    public Task(long id, String text) {
        this.id = id;
        this.text = text;
    }
}

// ApiInterface
public interface TaskApi {  
    @POST("/tasks")
    void createTask(@Body Task task);
}

// You can request like this
Task task = new Task(1, "my task title");  
Call<Task> call = taskService.createTask(task);  
call.enqueue(new Callback<Task>() {});  

Итак, ваше тело запроса выглядит следующим образом

{
    "id": 1,
    "text": "my task title"
}
...