2015-06-03 2 views
0

У меня проблема с дублирующимися косыми чертами, и мне интересно, есть ли решение, встроенное в Retrofit.Повторяющиеся слэши в дооснащении URL

Мой сервер предоставляет базовый URL, мы должны использовать, который будет выглядеть примерно так: .setEndpoint(http://some.url.com/)

Сервер также проходит по пути URI, который должен быть приложенный к этой конечной точке (с различными запросами). Поэтому мой сервер может отправить обратно /channels/videos.

Это получает вручено Модифицированные по следующему методу

@GET("/{uri}") 
void GET(@Header("Authorization") String authHeader, @Path(value = "uri", encode = false) String uri, 
     @Header("Cache-Control") String cacheHeaderValue, Callback<Object> callback); 

Это то проблематично, так как URL, который получить удар с помощью метода GET является http://some.url.com//channels/videos, который не будет корректно работать в моей ситуации.

Я попытался вручную вырезать конечную косую черту с моей базовой конечной точки - но я все еще видел дубликат косой черты, который я принимаю в результате "/{uri}" и /channels/videos.

Я думаю, что моя проблема будет устранена удалением ведущей косой черты в "/{uri}", но это не разрешено в Модернизации. И удаление ведущей косой черты в URI пути я вернусь с моего сервера, это не совсем возможно.

throw methodError("URL path \"%s\" must start with '/'.", path);

retrofit.RetrofitError: GET: URL path "{uri}" must start with '/'.

Есть ли другое решение этой проблемы?

Соответствующие ссылки:

Possible duplicate but they describe it a little differently

Jake Wharton saying it should be de-duped in what I think is the situation I'm describing

Maybe what Jake Wharton was referencing

Currently unanswered issue asking Jake this same question

+0

Почему бы вам не удалить URL-адрес вашей конечной точки? Что-то вроде этого 'http: // some.url.com' – siriscac

+0

' Я попробовал вручную вырезать конечную косую черту с моей базовой конечной точки ... ' Я также подумал, что это исправит, но похоже, что это произойдет от ведущей косой черты как в аннотации, так и в пути, который я получаю с моего сервера. –

ответ

0

Эта проблема исправлена ​​в Retrofit 2.0.0-бета3. Это требует изменения сигнатуры/аннотаций метода в вашем классе обслуживания. Подпись для оригинального метода GET теперь:

@GET 
Call<Object> GET(@Header("Authorization") String authHeader, @Url String uri, 
       @QueryMap Map<String, String> options, @Header("Cache-Control") String cacheHeaderValue); 

Это использование compile 'com.squareup.retrofit2:retrofit:2.0.0-beta3'

Если вы все еще на предыдущей версии Модернизированный, я решил проблему временно со следующим хелперов (называя его uri перешел в GET):

public static String validateUri(String uri) { 
    if (uri.charAt(0) == '/') { 
     uri = uri.substring(1); 
    } 
    return uri; 
} 
Смежные вопросы