改造覆盖端点

Ste*_*eve 14 java retrofit

我可以覆盖RestAdapter构建器上设置的端点路径吗?所以说我有20个端点使用相同的基本URL,但有1个端点没有.我想调用setEndpoint来使用所有20个,但是在我需要使用不同基本URL的情况下覆盖.

Builder builder = new RestAdapter.Builder().setEndpoint("http://url");
Run Code Online (Sandbox Code Playgroud)

使用构建器上的端点路径集:

 @GET("/relative
 Something getClip();
Run Code Online (Sandbox Code Playgroud)

使用绝对路径(不起作用):

 @GET("http://absolute/path")
 Something getAlert();
Run Code Online (Sandbox Code Playgroud)

Mig*_*gne 25

每次发出请求时,RestAdapter都会实际咨询EndPoint.这意味着您可以实现自己的并在RestAdapter中传递它.保持对它的引用意味着您可以在需要时更改URL.

public final class FooEndpoint implements Endpoint {
  private String url;

  public void setUrl(String url) {
    this.url = url;
  }

  @Override public String getName() {
    return "default";
  }

  @Override public String getUrl() {
    if (url == null) throw new IllegalStateException("url not set.");
    return url;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后简单地做这样的事情

FooEndPoint endPoint = new FooEndPoint();
// Keep a reference to this instance
endPoint.setUrl("url1");

RestAdapter.Builder builder = new RestAdapter.Builder();
    builder.setEndpoint(endPoint);

SomeApi api = builder.build().create(SomeApi.class);
api.getSomeDataFromUrl1();

// when needed you can update the url
endPoint.setUrl("url2");

api.getSomeDataFromUrl2();
Run Code Online (Sandbox Code Playgroud)

  • 使端点成为单个全局不适合异步调用.从我使用retrofit + rx-java进行的测试中,似乎在订阅时检查端点,而不是在构造observable时. (5认同)