带有 Retrofit POST 的 Call<T> 类型的目的

Aar*_*ron 5 java api android retrofit retrofit2

对 http 请求和 java 以及改造的新手,所以这可能是一个基本问题,但是......

我已经成功地设置了对 Web 服务的成功 http 调用,但在一方面有点困惑,主要是基于我从教程/示例中看到的内容。

我看过很多这样的例子:

@POST("/api")
Call<Foo> savePost(@Body Foo foo);
Run Code Online (Sandbox Code Playgroud)

我的理解是参数 'foo' 将被选定的转换器转换为 json 并作为 http 请求的正文传递。我不明白的是为什么 Call 的响应体类型也是 Foo?这里是否假设响应也将反序列化为 Foo 对象?有一个与您发送的正文相匹配的响应是常见的做法吗?我开始将它用于诸如 GET 之类的事情,但并没有真正理解为什么您会期望 POST 得到这样的响应。

Raj*_*har 3

首先解释一下Retrofit中什么是调用

它是一个Retrofit接口,可以通过execute同步调用,也可以通过enqueue异步调用。无论哪种情况,都可以随时使用 cancel 取消。

无效入队(回调回调);

Asynchronously send the request and notify
Run Code Online (Sandbox Code Playgroud)

响应execute()抛出IOException;

Synchronously send the request and return its response.
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,您从 savePost 获得的 Response 也是 Foo。它将反序列化为 Foo 对象。

这取决于用例,您是否必须获取 Foo 对象,如果您不想,可以使用ResponseBody而不是 Foo