Как я могу отправить json данных, используя метод GET в Retrofit? - PullRequest
0 голосов
/ 11 марта 2020

Бэкэнд-разработчик дал мне описание API, которое использует метод GET, и оно имеет формат JSON.

Я никогда не пробовал таким образом, и, насколько я знаю, отправка данных в теле запроса невозможна. с методом GET в модифицированной библиотеке.

Он использует Django. И я пытался с Query и Path ... И ничего не работает ... Даже я пытался без аннотации с параметром.

{
    "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){

}

Все не работало. Тем не менее, он работал на Почтальоне, используя сырой формат (следует выбрать JSON). Как я могу использовать запрос GET с JSON? в чем проблема?

1 Ответ

1 голос
/ 11 марта 2020

Метод 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

...