Я столкнулся с проблемой с Retrofit и хотел бы найти подходящий ответ, поскольку единственный способ, которым я могу думать об этом, довольно уродлив и непрактичен.
Для аннотации дооснащения PATH требуется "/" в начале (как вы можете прочитать в этом коде, извлеченном из источника библиотеки:
/** Loads {@link #requestUrl}, {@link #requestUrlParamNames}, and {@link #requestQuery}. */
private void parsePath(String path) {
if (path == null || path.length() == 0 || path.charAt(0) != '/') {
throw methodError("URL path \"%s\" must start with '/'.", path);
}
Проблема, с которой я столкнулась, состоит в том, что часть PATH исходит из бэкэнда в объекте ответа, что означает, что все строки PATH уже отформатированы из бэкенда ранее в другом ответе следующим образом:
Object : {
href: "/resources/login..."
}
Как вы можете видеть, при включении чего-то подобного URL-адрес получает неверный результат:
@GET("{/loginHref}")
void login(@EncodedPath("loginHref") String loginHref,
Callback<User> callback);
к чему-то вроде http://mybaseurl.com//resources/login" * double//перед ресурсами
Это может определенно вызвать проблемы в некоторых конечных точках, и я не могу представить себе простой способ решить эту проблему, кроме как сделать что-то вроде:
a) Измените мою собственную версию модификации, чтобы удалить эту проверку/проверку персонажа (это последнее средство)
b) Утрируйте href перед использованием метода из интерфейса (который я хотел бы избежать любой ценой, а также добавил бы ненужное преобразование по всему месту.
c) Перехватите запрос и правильно сформируйте URL-адрес в случае возникновения этого сценария (действительно, уродливое решение также).
Любая идея, предложения?
Спасибо!