JessYanCoding / RetrofitUrlManager

🔮 Let Retrofit support multiple baseUrl and can be change the baseUrl at runtime (以最简洁的 Api 让 Retrofit 同时支持多个 BaseUrl 以及动态改变 BaseUrl).
Apache License 2.0
2.18k stars 310 forks source link

不用map去存放要改变的DomainKey和Domain,直接在Headers里面放域名,然后读Headers的时候取出来替换是不也可以? #30

Closed GuoJinyu closed 5 years ago

GuoJinyu commented 5 years ago
public interface ApiService {
     @Headers({"Domain-Name: douban"}) // Add the Domain-Name header
     @GET("/v2/book/{id}")
     Observable<ResponseBody> getBook(@Path("id") int id);
}

改为:

public interface ApiService {
     @Headers({"Domain-Name: https://www.douban.com"}) // Add the Domain-Name header
     @GET("/v2/book/{id}")
     Observable<ResponseBody> getBook(@Path("id") int id);
}

然后具体地址作为静态常量来复用是不也可以呢?当然本质是一样的。

JessYanCoding commented 5 years ago

你只考虑了支持多 BaseUrl,BaseUrl 不可变的需求,但是你没考虑到 BaseUrl 可变的需求,如果只是支持多 BaseUrl,不需要 BaseUrl 可变,那使用 Retrofit 的原生方式【 @Get(完整地址) 】来请求就可以实现,RetrofitUrlManager 根本就没有存在的必要了

就是因为注解中的参数只能为常量,所以不可更改,所以不管是 @Headers 还是 @Get 里面的参数在运行时是不可改变的,所以单纯通过注解的方式才无法实现 BaseUrl 可变,所以 RetrofitUrlManager 才增加了一个 Map 来使 BaseUrl 可变。

GuoJinyu commented 5 years ago

你说的对,Thanks