ホームページ > Java > &#&チュートリアル > SpringBoot はどのように Feign 呼び出しを通じてヘッダー内のパラメーターを渡しますか?

SpringBoot はどのように Feign 呼び出しを通じてヘッダー内のパラメーターを渡しますか?

PHPz
リリース: 2023-05-16 20:38:07
転載
2569 人が閲覧しました

[SpringBoot] Feign 呼び出しを介してヘッダーのパラメーターを渡す

Feign を介してヘッダー パラメーターを渡す方法

問題の説明

Feign を使用して SpringCloud の別のサービスをリクエストしますAPIインターフェイスを使用する場合、ヘッダーにパラメータを渡す必要がありますが、特別な処理を行わないとヘッダーのパラメータは失われます。

解決策

オプション 1: @RequestHeader(name = "headerName") を渡す

例: Feign は次のように定義されます

@FeignClient(name = "service-name")
public interface XXXFeignClient {
    @RequestMapping(value = "/user/getUserTicket", method = RequestMethod.GET)
    String getUserTicket(@RequestParam("id") String id);
}
ログイン後にコピー

サービス service-name の /user/getUserTicket インターフェイスは、ヘッダーからリファラー データを取得する必要があります。その後、上記のコードを変更できます。

@FeignClient(name = "service-name")
public interface XXXFeignClient {
    @RequestMapping(value = "/user/getUserTicket", method = RequestMethod.GET)
    String getUserTicket(@RequestParam("id") String id, @RequestHeader(name = "Referer") String referer);
}
ログイン後にコピー

次に、呼び出し時に ## などのリファラー パラメーターを渡します。 #

public String getTicketById(@RequestParam("id") String id, HttpServletRequest request) {
        String referer = request.getHeader("Referer");
        return xxxFeignClient.getUserTicket(id, referer);
    }
ログイン後にコピー

オプション 2: RequestInterceptor インターフェイスを実装することによる

まず、RequestInterceptor インターフェイスを実装する apply メソッドを次のようにカスタマイズします。

import org.springframework.stereotype.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
@Configuration
public class FeignConfiguration implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        Enumeration<String> headerNames = request.getHeaderNames();
        if (headerNames != null) {
            while (headerNames.hasMoreElements()) {
                String name = headerNames.nextElement();
                String values = request.getHeader(name);
                requestTemplate.header(name, values);
            }
        }
    }
}
ログイン後にコピー

次に、カスタム構成クラスを Feign に構成します。以上です Feign でのインターフェースヘッダパラメータの転送は実現できます

@FeignClient(value = "service-name" ,configuration = FeignConfiguration.class)
    public interface XXXFeignClient {
    }
ログイン後にコピー

以上がSpringBoot はどのように Feign 呼び出しを通じてヘッダー内のパラメーターを渡しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート