我有一个这样的REST客户端界面:
public interface NameSearchClient {
@RequestLine("POST")
@Headers("Content-Type: application/json")
SearchResponse searchByName(NameSearchRequest request);
}
它在工厂类中实现和设置,如下所示:
@Component
public class NameClientFactory {
public <T> T createFeignClient(Class<T> clientClass, String apiUrl) {
return Feign.builder()
.encoder(new GsonEncoder())
.decoder(new GsonDecoder())
.target(clientClass, apiUrl);
}
}
我想知道是否有可能编写一个Aspect注释,在该客户端进行的每次调用时,执行一些操作(在我的情况下是另一个HTTP调用)并为请求添加一个新标头? AspectJ是正确的工具吗?
创建一个实现feign.RequestInterceptor
的bean并在那里完成你的工作:
@Component
public class FeignRequestInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
// your code here
}
}
另见this answer。