我遇到了重复斜杠的问题,我想知道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
答案 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;
}