PATH中的改进和斜杠字符

Jat*_*ago 10 android retrofit

我正面临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);
    }
Run Code Online (Sandbox Code Playgroud)

我面临的问题是PATH部分来自响应对象的后端,这意味着所有PATH的字符串已经在之后的其他响应中从后端格式化,如下所示:

Object : {
    href: "/resources/login..."
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,当包含类似这样的内容时,URL会格式错误:

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

类似于" http://mybaseurl.com//resources/login"*在资源面前加倍//

这肯定会导致某些端点出现问题,除了执行以下操作之外,我无法想出解决此问题的简单方法:

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

b)在从界面使用该方法之前截断href(我不惜一切代价避免使用该方法,并且会在整个地方添加不必要的转换.

c)拦截请求并在发生此情况时正确形成URL(同样非常难看的解决方案).

有什么想法,建议?

谢谢!

Ash*_*ali 3

我认为这个链接会帮助你路径替换

您的新实现将如下所示。

@GET("/")
void login(Callback<User> callback);
Run Code Online (Sandbox Code Playgroud)

您可以提供自定义端点实现,您可以在其上更改相对路径。

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

用法如下

RestAdapter restAdapter = new RestAdapter.Builder()
                .setEndpoint(new CustomEndPoint(object.href));
then restadapter.create........
Run Code Online (Sandbox Code Playgroud)

希望对你有帮助。