背景
すべてのインターフェイスは、それがSpringCloud開発ツールは、一般的にHTTP装うを使用しているため、通常、サードパーティのAPIヘッダーまたはparamはパラメータ(トークン、開発者キーなど)を固定ドッキング中に配置する必要があります。各メソッド選択されたコピーは、適切なフィールドならば、かなり冗長であるように思われます。今回はインターセプタ機能を装う使用することができます。
実現
話は安いです、私のコードを示しています。
名前=アレン:選択した特定のシーンの下には、FeignClientすべてを持参する必要がクエリ文字列をインターフェース
@FeignClient(value = "example", url = "https://api.xxx.com",configuration = MyConfig.class)
public interface ExampleClient {
@PutMapping(value = "/a")
AddRes add(@RequestParam("id") String id);
@DeleteMapping(value = "/b")
DelRes delete(@RequestParam("id") String id);
}
クラスを達成するために以下の構成、設定クラス@FeignClient注釈に設定パラメータを指定します
public class MyConfig {
@Bean("myInterceptor")
public RequestInterceptor getRequestInterceptor() {
return new MyClientInterceptor();
}
}
//拦截器实现
class MyClientInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
requestTemplate.query("name","Allen") ;
}
}
Configurationクラスは、私たちのカスタムインターセプタ、継承するインターセプタニーズ指定RequestInterceptorを達成するため、(RequestTemplate requestTemplate)を適用する方法を。我々はRestTemplateインスタンスが要求を傍受してしまった。このように、あなたは〜スロー共通パラメータの友人を駆動することができます
必要に応じて、クエリにこの呼び出しは、等ヘッダ、本体、として他のAPIがあり、新たなクエリPARAMを添加し、呼び出すことができます。
プロセスは比較的単純であるならば、我々は直接の構成クラスでラムダ書き込み匿名内部クラスを使用することができ、コードがはるかにシンプルに見えます。
public class MyConfig {
@Bean
public RequestInterceptor requestInterceptor() {
return template -> template.query("name", "Allen");
}
}
装う複数のインターセプタはできますが、春の実行順序を保証するものではありません。
ゼロ以上{@codeのRequestInterceptors}は、このようなにヘッダを追加するなどの目的のために構成することができる
すべての要求。保証はインターセプタが適用される順序に関して与えていません。