FeignClient インターフェースのいくつかの方法のまとめ

 @FeignClientアノテーションはリモート呼び出しプロトコルをカプセル化しています。springbootの開発やマイクロサービスの開発では、サービスをまたいで呼び出したり、外部インターフェースを呼び出したりする必要があるため、FeignClientを利用することができます。

 

1. @FeignClientの紹介

@FeignClient アノテーションは、Netflix Feign に基づいて実装される Spring Cloud のコンポーネントです。@FeignClient アノテーションは、サービス間の RESTful インターフェイスの定義と実装に役立ち、サービス間の呼び出しをより便利で信頼性の高いものにします。@FeignClient アノテーションをクライアントの API インターフェース定義で使用すると、HTTP API インターフェースを Java インターフェースに変換できるため、ローカル メソッドを呼び出すのと同じようにリモート サービスを呼び出すことができます。

アノテーションのソースコードと分析
 

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface FeignClient {

    @AliasFor("name")
    String value() default "";

    String contextId() default "";

    @AliasFor("value")
    String name() default "";

    @Deprecated
    String qualifier() default "";

    String[] qualifiers() default {};

    String url() default "";

    boolean decode404() default false;

    Class<?>[] configuration() default {};

    Class<?> fallback() default void.class;

    Class<?> fallbackFactory() default void.class;

    String path() default "";

    boolean primary() default true;

}

1.1 value 属性
オプションのプロトコル プレフィックスが付いたサービスの名前。名前の同義語。URL が指定されているかどうかに関係なく、すべてのクライアントに名前を指定する必要があります。プロパティ キーとして指定できます (例: ${propertyKey})。

1.2 contextId 属性
これは、名前 (存在する場合) ではなく Bean 名として使用されますが、サービス ID としては使用されません。

1.3 name 属性は
value と同じ効果があります。

1.4 修飾子プロパティ
qualifier() は非推奨になりました。qualifier() と qualifiers() の両方が存在する場合は、後者を使用します。ただし、qualifiers() によって返される配列が空であるか、null または空白の値のみが含まれている場合は除きます。その場合は、qualifier() を最初に返します。が存在しない場合は、デフォルト値 =contextId+"FeignClient" が返されます。

1.5 qualifiers 属性について
は以上で説明しました。

1.6 url 属性
絶対 URL または解決可能なホスト名 (プロトコルはオプション)


1.7 false 例外をスローする代わりにdecode404 属性 404 をデコードする必要があるかどうか

1.8 構成属性
外部クライアント用のカスタム構成クラス。feign.codec.Decoder、feign.codec.Encoder、feign.Contract など、クライアントを構成する部分を含めることができる @Bean 定義をオーバーライドします。

1.9 fallback 属性
外部クライアントインターフェースのフォールバッククラスを指定します。フォールバック クラスは、このアノテーションによってアノテーションが付けられたインターフェイスを実装し、有効な Spring Bean である必要があります。

1.10 fallbackFactory 属性
指定された外部クライアント インターフェイスのフォールバック ファクトリを定義します。フォールバック ファクトリは、FeignClient によって注釈が付けられたインターフェイスを実装するフォールバック クラスのインスタンスを生成する必要があります。フォールバック ファクトリは有効な Spring Bean である必要があります。

1.11 path 属性
すべてのメソッド レベルのマッピングで使用されるパス プレフィックス。

1.12 プライマリ属性
外部エージェントをメイン Bean としてマークするかどうか。デフォルトは true です。

2. 一般的な FeignClient インターフェースのいくつかの方法のまとめ

@FeignClient(name = "myhuaweicloud", url = "https://xxx.com/")
public interface HuaweicloudClient {
	
		/**
		 * 获取access-token接口
		 */
	    @PostMapping("v1/xxx/enterprises/access-token")
		public Map<String,Object>  getAccessToken(@RequestBody Map<String, Object> params);

	    /**
		 * 获取实况地址统一接口
		 */
	    @PostMapping("/v2/xxx/devices/channels/media/live-connections")
		public Map<String, Object> liveConnections(@RequestHeader(name = "Access-Token",required = true) String Token,@RequestBody Map<String, Object> params);

		/**
		 * 获取通道列表
		 * @param map
		 * @return
		 */
	    @GetMapping("/v1/xxx/channels")
		public Map<String, Object> channels( @RequestHeader(name = "Access-Token",required = true) String Token,@RequestParam("device_id")String deviceId,
				
				@RequestParam("offset") Integer offset,@RequestParam("limit")Integer limit );
	    
		/**
		 * 获取设备列表
		 * @param map
		 * @return
		 */
	    @GetMapping("/v1/xxx/devices")
		public Map<String, Object> devices( @RequestHeader(name = "Access-Token",required = true) String Token,
				@RequestParam("device_name") String deviceName,
				@RequestParam("offset") Integer offset,
				@RequestParam("limit")Integer limit);

}

1. @FeignClient(名前 = "myhuaweicloud"、URL = "https:/xxx.com/") を使用します。

インターフェースに注釈を付けます。

インターフェイスにカプセル化されたメソッドには同じパスがあります

@PostMapping

注釈の @GetMapping 。

これら 2 つのリクエスト メソッドは対応しています。@PostMapping アノテーションを使用して、インターフェースが post を通じてリクエストされる必要があることを示し、@GetMapping を使用して、インターフェースが get を通じてリクエストされる必要があることを示します。

2. 共通のパラメータ渡しメソッドを確認します。

@RequestBody Map<String, Object> パラメータ

json パラメータを body の形式で渡します。

@RequestHeader(name = "アクセス トークン",required = true) 文字列トークン

リクエストヘッダーでパラメータを渡します

@RequestParam("デバイス名") 文字列デバイス名

パラメータと値をキーバリュー方式で結合して送信する

おすすめ

転載: blog.csdn.net/dongjing991/article/details/132086839