Używam Retrofit dla mojej warstwy sieciowej w mojej aplikacji na Androida, ale mam problem z kodowaniem URL.Dlaczego funkcja Retrofit nie może poprawnie kodować ciągu zapytania za pomocą nawiasów kwadratowych?
Muszę zadzwonić API REST tak:
https://my_hostname.com/some_path?q=some_query¶m[0]=value1¶m[1]=value2&other_param=abcd
jak widać łańcuch zapytania składa się za pośrednictwem różnego rodzaju parametrów, więc postanowiłem użyć @QueryMap
adnotacji w interfejsie modernizacyjny z a Map<String, String>
gdzie q, param[1], param[0], other_param
to Klucze łańcuchowe mapy
Czego oczekuję? Spodziewam się, że nawiasy kwadratowe w adresie URL są kodowane %5B
dla '['
i %5D
dla '['
, ale tak się nie stanie.
Dlaczego tak się dzieje? Nawiasy kwadratowe powinny być zakodowane za pomocą kodowania procentowego. Czy to błąd, czy robię coś nie tak? Próbowałem też adnotacji @EncodedQueryMap
bez żadnych różnic.
że wygląda jak API REST należy spodziewa 'params' być tablicą wartości – njzk2
myślę serwer reszta nie powinna być za pomocą' [] ' w nazwach zmiennych, ale używaj tego, jak wszędzie indziej, jako wskaźnika listy, w którym to przypadku nawiasy nie powinny być zakodowane. – njzk2
Bez kodowania nawiasu interfejs API serwera nie działa poprawnie. Muszę zakodować nawiasy, ale chciałbym wiedzieć, jak to zrobić z modernizacją, a nie ręcznie. – Noodles