我如何在 Retrofit 中使用 GET 方法发送 json 数据?

how can i send json data using GET method in Retrofit?

后端开发人员给了我 API 描述,使用 GET 方法,它是 JSON 格式。

我从未尝试过这种方式,据我所知,在请求正文中发送数据是不可能的。在改造库中使用 GET 方法。

他使用 Django。我尝试了查询和路径......但没有任何效果......即使我尝试了没有带参数的注释。

{
    "data": "oicudsfqoerzxddadsdf"
}

1.

    @GET("find/data")
    fun findData(
        @Header("Authorization") sessionId: String,
        @Query("data") data: String
    ): Call<FinderResult>

2.

    @GET("find/data")
    fun findData(
        @Header("Authorization") sessionId: String,
        data: String
    ): Call<FinderResult>

3.

    @GET("find/data")
    fun findData(
        @Header("Authorization") sessionId: String,
        dataObj: DataObj
    ): Call<FinderResult>
@Keep
class DataObj(var data: String){

}

全部无效。但是,它使用原始格式在 Postman 上工作(应该 select JSON)。如何使用 JSON 的 GET 请求?有什么问题吗?

GET方法的目的只是从服务器获取数据,而不是发送数据。发送数据的唯一方法是在 url 中使用查询参数,它的限制是 2000 个字符。

当我们想要使用查询参数来发送数据时,我们应该小心发送格式正确的 url 字符。 JSON 需要在附加到 URL 之前进行处理。

所以我的建议是使用 @Query("<name of parameter which is specified by server>") 并将 @FormUrlEncoded 置于 findData 方法之上。

   @FormUrlEncoded
   @GET("find/data")
   fun findData(
        @Header("Authorization") sessionId: String,
        @Query("<name of parameter which is specified by server>") data: String
   ): Call<FinderResult>

有关更多信息,请查看:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET

https://futurestud.io/tutorials/retrofit-send-data-form-urlencoded https://www.vogella.com/tutorials/Retrofit/article.html