改造URL中的重复斜杠

时间:2015-06-03 14:51:44

标签: android url path retrofit

我遇到了重复斜杠的问题,我想知道Retrofit中是否有解决方案。

我的服务器提供了我们应该使用的基本网址,如下所示:.setEndpoint(http://some.url.com/)

服务器还传递应该附加到该端点的路径URI(具有各种请求)。所以我的服务器可能会发回/channels/videos

通过以下方法将其交给Retrofit

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

这是有问题的,因为使用GET方法获取的网址是http://some.url.com//channels/videos,在我的情况下无法正常工作。

我尝试从我的基本端点手动删除尾部斜杠 - 但我仍然看到一个重复的斜杠,我假设它是由"/{uri}"/channels/videos产生的。

我认为我的问题可以通过移除"/{uri}"中的前导斜杠来解决,但在Retrofit中是不允许的。删除路径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

1 个答案:

答案 0 :(得分:0)

此问题已在Retrofit 2.0.0-beta3中修复。它需要更改服务类中的方法签名/注释。原始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'

如果您仍然使用以前版本的Retrofit,我会使用以下帮助程序暂时解决问题(在传递给GET的uri上调用它):

public static String validateUri(String uri) {
  if (uri.charAt(0) == '/') {
      uri = uri.substring(1);
  }
  return uri;
}