Java Spring - 拦截 REST 客户端的执行(Hystrix Feign)
Java Spring - intercepting execution of a REST Client (Hystrix Feign)
我有一个像这样的 REST 客户端界面:
public interface NameSearchClient {
@RequestLine("POST")
@Headers("Content-Type: application/json")
SearchResponse searchByName(NameSearchRequest request);
}
它得到实施并 set-up 在工厂中 class 像这样:
@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);
}
}
我想知道是否可以编写一个方面注释,在该客户端每次调用时执行一些操作(在我的例子中是另一个 HTTP 调用)并向请求添加一个新的 header? AspectJ 是合适的工具吗?
创建一个实现 feign.RequestInterceptor
的 bean 并在其中完成您的工作:
@Component
public class FeignRequestInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
// your code here
}
}
另见 this answer。
我有一个像这样的 REST 客户端界面:
public interface NameSearchClient {
@RequestLine("POST")
@Headers("Content-Type: application/json")
SearchResponse searchByName(NameSearchRequest request);
}
它得到实施并 set-up 在工厂中 class 像这样:
@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);
}
}
我想知道是否可以编写一个方面注释,在该客户端每次调用时执行一些操作(在我的例子中是另一个 HTTP 调用)并向请求添加一个新的 header? AspectJ 是合适的工具吗?
创建一个实现 feign.RequestInterceptor
的 bean 并在其中完成您的工作:
@Component
public class FeignRequestInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate template) {
// your code here
}
}
另见 this answer。