Завершение переопределения конечной точки

Могу ли я переопределить путь конечной точки, установленный в конструкторе RestAdapter? Так что скажите, что у меня 20 конечных точек, которые используют один и тот же базовый URL, но есть 1, что нет. Я хотел бы назвать setEndpoint для всех 20 для использования, но переопределить в одном случае, когда мне нужно использовать другой базовый URL.

Builder builder = new RestAdapter.Builder().setEndpoint("http://url");

Использовать путь конечной точки на строителе:

 @GET("/relative
 Something getClip();

Использовать абсолютный путь (не работает):

 @GET("http://absolute/path")
 Something getAlert();

Ответы

Ответ 1

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;
  }
}

Затем просто сделайте что-то вроде этого

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();