PATH中的改造和斜杠字符

我面临一个改造的问题,并希望find一个合适的答案,因为我能想到的唯一方法是相当丑陋和不实际的。

改造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的string已经在其他响应中从后端格式化,如下所示:

 Object : { href: "/resources/login..." } 

正如你所看到的,当包含这样的内容时,URL会变得格格不入:

 @GET("{/loginHref}") void login(@EncodedPath("loginHref") String loginHref, Callback<User> callback); 

像“ http://mybaseurl.com//resources/login”*双//在资源面前

这肯定会导致一些端点的问题,我不能想象一个非常简单的方法来解决这个问题,除了做这样的事情:

a)修改我自己的翻新版本,删除/字符检查(这是最后的手段)

b)在使用接口中的方法之前截断href(我希望不惜一切代价避免这种方法,并会在整个地方添加不必要的转换。

c)截获请求,并正确地形成URL,以防万一发生这种情况(真是丑陋的解决scheme)。

任何想法,build议?

谢谢!

Solutions Collecting From Web of "PATH中的改造和斜杠字符"

我认为这个链接将帮助你更换path

您的新实现将如下所示。

 @GET("/") void login(Callback<User> callback); 

您可以提供可以更改相对path的自定义端点实现。

 public final class CustomEndpoint implements Endpoint { private static final String BASE = "http://192.168.1.64:5050/api/"; private String url; private String href; public CustomEndpoint(String href){ this.href = href; url = BASE + this.href; } @Override public String getName() { return "default"; } @Override public String getUrl() { if (url == null) throw new IllegalStateException("relative path not set."); return url; } } 

用法如下

 RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(new CustomEndPoint(object.href)); then restadapter.create........ 

希望这会帮助你。