【问题标题】:Purpose of Call<T> type with Retrofit POST使用 Retrofit POST 的 Call<T> 类型的目的
【发布时间】:2018-09-19 12:18:01
【问题描述】:

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

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

我见过很多这样的例子:

@POST("/api")
Call<Foo> savePost(@Body Foo foo);

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

【问题讨论】:

    标签: java android api retrofit retrofit2


    【解决方案1】:

    首先让我解释一下 Retrofit

    中的调用

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

    void enqueue(回调回调);

    Asynchronously send the request and notify
    

    响应execute()抛出IOException;

    Synchronously send the request and return its response.
    

    在上面的例子中,你将从 savePost 得到的响应也是 Foo。它会反序列化为 Foo 对象。

    这取决于用例,无论您是否必须获取 Foo 对象,如果您不希望您可以使用 ResponseBody 代替 Foo

    【讨论】:

    • 好的,那么 Foo 响应是否来自改造?还是来自我发送请求的网络服务?我想我对于想要一个包含您已经发送并且可能可以访问的数据的响应的用例仍然有点困惑。
    • @DrowningFish... 基本上你会得到来自 web 服务的 json 响应。在 GSON 或 Jackson Convertor 等 JSON 解析器的帮助下,将 json 反序列化为 Foo 对象。以上是罕见的用例。可能是服务器会为对象生成任何唯一的引用 id。
    猜你喜欢
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 2016-11-24
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多