如何在改装电话中发送请求正文?

How to send request body in retrofit call?

我在服务中定义了这个调用 class

@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 对象?

发送是什么意思?您的代码已经发送了请求正文和令牌。

您始终可以使用 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()
}

您可以使用 Model class 发送您的请求正文。

例如,

// 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"
}