Retrofit2 с Kotlin: URL неожиданно меняется - PullRequest
0 голосов
/ 29 сентября 2019

Работа над проектом Android с Kotlin с использованием Retrofit.Проблема в том, что URL-адрес неожиданно меняется, и выдается 422.

В частности, проблема в том, как Retrofit обрабатывает мою отформатированную дату.API использует этот формат времени:

2019-08-21T05%3A12%3A53Z

, который в этом примере представляет 21 августа 2019 года в 05:12:53.Как видите, разделитель для значений времени: %3A.

. Этот интерфейс я использую:

interface CurrenciesApi {

    @GET("currencies/sparkline?key=${apiKey}")
    fun getCurrenciesSparkline(
        @Query("start") start: String,
        @Query("end") end: String): Call<List<CurrencySparkline>>
}

Незначительные замечания : apiKey - это константа верхнего уровня, правильно импортированная.CurrencySparkline - это класс данных, соответствующий ответу JSON.

Из предыдущих модульных тестов я знаю, что модификация должна быть построена таким образом

let myBaseUrl: String = "https:// ..."
let retrofit: Retrofit = Retrofit.Builder()
    .baseUrl(myBaseUrl)
    .addConverterFactory(GsonConverterFactory.create())
    .build()

реализация CurrenciesApi интерфейса

val api = retrofit.create(CurrenciesApi::class.java)

и, наконец, вызов

val start = "2019-08-08T02%3A17%3A59Z"
val end = "2019-09-01T00%3A00%3A00Z"
response: Response<List<CurrencySparkline>> = api
    .getCurrenciesSparkline(start, end)
    .execute()

При тестировании конечной точки API в браузере ответ действителен и данные возвращаются.Однако, если я посмотрю на URL в режиме отладки, то увижу, что я изменил значения для start и end:

... &start=2019-08-08T02%253A17%253A59Z&end=2019-09-01T00%253A00%253A00Z ...

Почему это происходит и как я могу это исправить?Любая помощь очень ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...