【问题标题】:What is the difference between @Field and @Query in retrofit改造中@Field和@Query有什么区别
【发布时间】:2020-02-06 05:06:47
【问题描述】:

在某些 POST 请求中,我不知道何时使用 @Field 和 FormUrlEncoded 以及何时使用 @Query

例如:

@POST("list-products-for-sale")
        Call<ListAllProductsResponse> getNewProducts(@HeaderMap Map<String, 
        String> headers,@Query("lastProductId") String lastProductId);

当我在这里尝试使用 @Field 时,它没有正确响应,当我将它切换到 @Query 时,它工作得很好。
我想知道为什么@Field 不能正常工作,而 Query 可以正常工作,并且我在 POSTMAN 中进行了测试,我将数据作为格式编码发送,它给了我结果。
编辑 顺便说一句,我正在传递 Content-Type:application/json, Accept: application/json with an Authorization key

【问题讨论】:

  • 一个字段在查询附加到 url 时操纵请求的主体
  • @Pratik Butani AndroidDev 感谢您的参考。知道区别。

标签: android retrofit2


【解决方案1】:

@Field 用于在Retrofit 中发送@FormUrlEncoded 请求,它隐藏了您的参数并且不附加url 以提供安全性。用于POST 请求。

@Query 参数附加到 URL。

如果您使用@Field 请求,它将隐藏您的参数并且不附加网址。

如果您使用的是@Query 请求,那么您的所有参数都将附加到您的请求中并且对用户可见。

根据您的 api 请求,您必须使用上述注释之一。如果 api 请求接受 @FormUrlEncoded 数据而不是使用 @Field 或者如果他们想使用 url 附加它而不是使用 @Query

您可以从以下链接获取更多信息:

1) https://square.github.io/retrofit/2.x/retrofit/index.html?retrofit2/http/Query.html

2) https://square.github.io/retrofit/2.x/retrofit/retrofit2/http/Field.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-05
    • 2014-07-26
    • 2017-09-06
    • 2017-04-03
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多