我在为我的FeignClient从application.yml文件中获取API-key时遇到一些问题。
@FeignClient(name="CRM-api", url="${api_url}", configuration= <myConfiguration.class>)
@Headers({"Authorization: ${api_key}"})
public interface CRMAPIClient {在Headers注解中有没有可能有一个占位符值?我也试过在每个端点上设置头,但它仍然无法检索api-key的配置。我设法获取${api_url}值,但未获取${api_key}值
// Linus
发布于 2018-10-07 13:42:53
我还没有使用过这种方法,但我将对此进行研究。但是,如果要求是向客户端请求注入Authorization头,那么更好的方式是用BasicAuthRequestIntercepter编写(为了参考,请查看如何使用伪装),然后将头添加到客户端的每个请求中。如果你使用注解来定义你的伪装客户端,那么使用配置属性来定义配置类,然后在这个类中重写拦截器相关的方法并返回你自己的拦截器。示例代码:
import feign.auth.BasicAuthRequestInterceptor;
@Configuration
public class FeignClientConfiguration {
@Bean
public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
return new BasicAuthRequestInterceptor("Authorization", ${API_KEY});
}
}然后将这个类注入到你的feign客户端:
@FeignClient(name="service",configuration = FeignClientConfiguration.class)需要注意的是:(摘自其他文章)在这里使用@Configuration会使这个bean应用于所有@FeignClient,而您不需要configuration = part。如果删除@Configuration,则此bean将被忽略,而configuration = part什么也不做。正确的方法是添加@Configuration,然后使用excludeFilters从@ComponentScan中排除它(如果您只想在一个特定的@FeignClient上使用它
发布于 2020-01-24 15:50:06
请删除@Headers中的"$“符号
可以,您可以通过以下方式发送-
@FeignClient(name="email-service", url ="${email.url}")
public interface EmailService
{
@RequestMapping(method = RequestMethod.POST,value="/send_mail", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
@Headers({"Content-Type: application/x-www-form-urlencoded","x-auth-id: {email.xauthid}"})
void sendData(@RequestBody Map<String, ?> formParams);
}
In application.properties of define the configuration
email.url=<<url-for-sending-mail>>
email.xauthid=110https://stackoverflow.com/questions/52331717
复制相似问题