android - 改造中@Field和@Query有什么区别

标签 android retrofit2

在一些 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 中进行了测试,在那里我将数据作为 formurlencoded 发送,它给了我结果。
编辑
顺便说一句,我正在传递 Content-Type:application/json, Accept: application/json with an Authorization key

最佳答案

@Field用于发送@FormUrlEncoded请求 Retrofit它隐藏了您的参数并且不附加 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

关于android - 改造中@Field和@Query有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57848058/

相关文章:

android - 如何修复 Android .aar 项目中的 'java.lang.NoClassDefFoundError'

java - Retrofit2:将带有动态键的 JSON 转换为 Map<String, Model>,其中 Model 也包含这些键

android - RxJava2 如何在请求参数更改时更新现有订阅

android - 使用 Retrofit 2.0 发布多部分表单数据,包括图像

android - 如何获取 android 仪器测试的代码覆盖率报告

android - 下载 2.3.3 的 android 源代码并将其作为 eclipse 项目打开

android - 在不对 subview 进行动画处理的情况下对 ViewGroup 进行动画处理

java - 无法一次请求多个危险权限

android - Rxjava2、Retrofit2 - 在两个类之间传输数据。

android - 在 Android 2.2 中添加日历和事件