Java 改造接口的设计模式
我的改型界面创建者的设计有问题。我希望能够以通用的方式实例化API接口,并在传递令牌时更新相应的实例。当前,当我更新令牌时,我必须再次调用createService()方法,以获取在生成接口时使用令牌的新实例 有人问了一个类似的问题,但始终没有得到答案Java 改造接口的设计模式,java,android,design-patterns,retrofit,Java,Android,Design Patterns,Retrofit,我的改型界面创建者的设计有问题。我希望能够以通用的方式实例化API接口,并在传递令牌时更新相应的实例。当前,当我更新令牌时,我必须再次调用createService()方法,以获取在生成接口时使用令牌的新实例 有人问了一个类似的问题,但始终没有得到答案 使您的拦截器如下所示: public class TokenInterceptor implements Interceptor { private String token; public String getToken()
使您的拦截器如下所示:
public class TokenInterceptor implements Interceptor {
private String token;
public String getToken() {
return token;
}
@Override
public Response intercept(Chain chain) throws IOException {
Request original = chain.request();
// Request customization: add request headers
Request.Builder requestBuilder = original.newBuilder()
.header("Cache-Control", "no-cache")
.header("Accept", "application/json")
.method(original.method(), original.body());
if (getToken() != null) {
requestBuilder.header("Authorization", "Bearer " + AmzToken);
}
Request request = requestBuilder.build();
return chain.proceed(request);
}
public void setToken(String token) {
this.token = token;
}
}
将它添加到您的HTTP客户端并保持对该拦截器的引用。
现在,您不必在每次令牌更改后调用
createService()
。只需通过interceptor.setToken()更改interceptor中的token即可。我可以像他那样将您的类设置为内部静态类吗。您只需要将令牌设置为外部类
amazonApi = RetrofitCreator.createService(AmazonAPI.class);
public class TokenInterceptor implements Interceptor {
private String token;
public String getToken() {
return token;
}
@Override
public Response intercept(Chain chain) throws IOException {
Request original = chain.request();
// Request customization: add request headers
Request.Builder requestBuilder = original.newBuilder()
.header("Cache-Control", "no-cache")
.header("Accept", "application/json")
.method(original.method(), original.body());
if (getToken() != null) {
requestBuilder.header("Authorization", "Bearer " + AmzToken);
}
Request request = requestBuilder.build();
return chain.proceed(request);
}
public void setToken(String token) {
this.token = token;
}
}