我有一个用@Retryable
注释的单例类。在此过程中,我们使用@Client
进行调用,并带有作为参数传递的auth令牌。
如果身份验证已过期,我们希望重新进行身份验证,然后使用更新的令牌重试方法调用。
我们处理RetryEvent
并获得一个新令牌,但是我们无法更新原始方法调用参数。该方法返回一个Single
。
类似的东西:
@Retryable
@Singleton
class test {
@Inject TestRestClient testRestClient
Single<E> getStuff(AuthClient auth, String param) {
testRestClient.apiCall(auth.token, param).map{ stuff ->
do some stuff as E
}
}
}
// Retry Handler
@Singleton
class AuthRetryEventListener implements ApplicationEventListener<RetryEvent> {
@Inject
AuthService authService
@Override
void onApplicationEvent(RetryEvent event) {
MutableArgumentValue argumentValue = event.source.parameters.find{it.value.value.class in AuthClient.class}?.value
if(argumentValue){
AuthClient authClient = argumentValue.value as AuthClient
authService.refresh(authClient)
argumentValue.setValue(authClient)
}
}
}
这是解决这个问题的正确方法吗?如何使用更新后的参数再次进行方法调用?
谢谢。
答案 0 :(得分:0)
@Retryable
的全部要点是重试原始呼叫。您尝试执行的操作不适合@Retryable
的用例。这很可能更适合在过滤器中实现。