В настоящее время я создаю симулируемый клиент вручную и передаю ему Перехватчики для авторизации.Я хотел бы иметь более умный Retryer для некоторого кода ответа.
public class myErrorEncoder extends ErrorDecoder.Default {
@Override
public Exception decode(final String methodKey, final Response response) {
if (response.status() == 401) {
String token = refreshToken(); // I would like to refresh the token and Edit the client
return new RetryableException("Token Expired will retry it", null);
} else {
return super.decode(methodKey, response);
}
}
}
Перехватчик
@Bean public CustomInterceptor getInterceptor(String token) {
return new CustomInterceptor(token);}
Feign Builder
private <T> T feignBuild(final Class<T> clazz, final String uri, final String token) {
return Feign
.builder().client(new ApacheHttpClient())
.encoder(new GsonEncoder())
.decoder(new ResponseEntityDecoder(feignDecoder())
.retryer(new Retryer.Default(1,100,3))
.errorDecoder(new ErrorDecoder())
.requestInterceptor(getInterceptor(token))
.contract(new ClientContract())
.logger(new Slf4jLogger(clazz)).target(clazz, uri);
}
Теперь я хотел бы обновить симулированный клиент с обновленным токеном и повторить попытку.Есть ли способ получить доступ к экземпляру клиента и настроить его.