Подпитывать HTTP — избегать кодирования URL

#rest #http #kotlin #parse-platform

#rest #http #kotlin #синтаксический анализ-платформа

Вопрос:

Используя retrofit, я мог бы получить и избежать URL-адреса, закодированного, как показано ниже:

 @GET("classes/Tournaments")
    fun searchTournament(@Query(value = "where", encoded = false) query: String): Call<List<Tournament>>
  

В Fuel этот запрос GET:

 fun searchTournament(name: String): Any {
    val (request, _, result)
            = Fuel.get(baseUrl.plus("/classes/tournaments"), listOf("where" to mapOf("name" to name))).responseString()
    val (payload, error) = result

    println(request.url)

    return ""
}
  

сгенерируйте этот URL: https://parseapi.back4app.com/classes/tournaments?where={name=Brasileirão 2019} это вызывает ошибку.

Я не смог найти ничего ясного в документах об избежании кодирования. Возможно ли это?

Мое приложение — это консольное приложение Kotlin (без Android)

Когда я отправляю этот запрос на сервер, он отвечает Http 500 — Ошибки внутреннего сервера (без дополнительной информации). Я думаю, что это не понимание запроса.

 2019-04-02T03:17:23.314Z - Uncaught internal server error.
  

Сервер является экземпляром ParseServer (Back4App) Я не смог расшифровать запрос там.

Комментарии:

1. that causes an error почему? это довольно справедливо. Просто убедитесь, что вы декодируете его обратно после получения

2. как? сервер не мой. Я получил ошибку http 500.

Ответ №1:

Вот четкая инструкция по использованию rest api.

https://docs.parseplatform.org/rest/guide/#query-constraints

Значение / форматирование where key неверно. Вы должны использовать двойные кавычки и ‘:’ вместо прямого использования ключа запроса с ‘=’.

Итак, ваш закодированный URL-адрес должен быть примерно таким:https://parseapi.back4app.com/classes/tournaments ?где={«name»:»Brasileirão+2019″}

Ответ №2:

На самом деле это не было проблемой кодирования.

Я меняю свой код kotlin на фрагмент ниже, заменяя карту внутри listOf простой строкой, и это работает.

 val (request, _, result)
                = Fuel.get(baseUrl.plus("/classes/Tournaments"), listOf("where" to "{"name": "$name"}")).responseString()
        val (payload, error) = result