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); }
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); } } } }
@FeignClient(value = "service-name" ,configuration = FeignConfiguration.class) public interface XXXFeignClient { }
以上がSpringBoot はどのように Feign 呼び出しを通じてヘッダー内のパラメーターを渡しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。