Работа над проектом 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 ...
Почему это происходит и как я могу это исправить?Любая помощь очень ценится.