OpenFeign如何设置header呢?

乔欣 Spring Cloud 发布时间:2023-03-03 23:21:36 阅读数:14508 1
下文笔者讲述OpenFeign设置header的方法分享,如下所示

设置Feign的Header信息的实现思路

方式1:
   在@RequestMapping注解里添加headers属性
方式2:
   在方法参数前面添加@RequestHeader注解
方式3:
   在方法或者类上添加@Headers的注解
方式4:
   在方法参数前面添加@HeaderMap注解
方式5:
   实现RequestInterceptor接口

@RequestMapping注解里添加headers属性

application.yml中配置
app.secret: appSecretVal

编写feignClient
@PostMapping(value = "/book/api", headers = {"Content-Type=application/json;charset=UTF-8", "App-Secret=${app.secret}"})
void saveBook(@RequestBody BookDto condition);

方法参数前面添加@RequestHeader注解

设置单个header属性
@GetMapping(value = "/getStuDetail")
public StudentVo getStudentDetail(@RequestBody StudentDto condition, @RequestHeader("Authorization") String token);


设置多个header属性
@PostMapping(value = "/card")
public CardVo createCard(@RequestBody CardDto condition, @RequestHeader MultiValueMap<String, String> headers);

在方法或类上添加@Headers注解

使用feign自带契约
@Configuration
public class FooConfiguration {
    @Bean
    public Contract feignContract() {
        return new feign.Contract.Default();
    }
}
FeignClient使用@RequestLine注解, 而未配置feign自带契约Contract时, @Headers不会起作用
   而且启动项目会报错:
     Method xxx not annotated with HTTP method type (ex. GET, POST)
     @RequestLine is a core Feign annotation, but you are using the Spring Cloud @FeignClientwhich uses Spring MVC annotations

配置@Headers注解

@FeignClient(url = "${user.api.url}", name = "user", configuration = FooConfiguration.class)
public interface UserFeignClient {
    @RequestLine("GET /simple/{id}")
    @Headers({"Content-Type: application/json;charset=UTF-8", "Authorization: {token}"})
    public User findById(@Param("id") String id, @Param("token") String token);
}

配置@HeaderMap注解

@FeignClient(url = "${user.api.url}", name = "user", configuration = FooConfiguration.class)
public interface UserFeignClient {
    @RequestLine("GET /simple/{id}")
    public User findById(@Param("id") String id, @HeaderMap HttpHeaders headers);
}

实现RequestInterceptor接口

当FeignRequestInterceptor注入到spring容器的话就会全局生效
  就是说即使在没有指定configuration属性的FeignClient该配置也会生效 
配置@Component或@Service 或 @Configuration 就可以将该配置注入spring容器中
即可实现全局配置, 从而该项目中的所有FeignClient的feign接口都可以使用该配置.
如果只想给指定FeignClient的feign接口使用该配置, 请勿将该类配置注入spring中.

@Configuration
public class FeignRequestInterceptor implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate template) {
        template.header(HttpHeaders.AUTHORIZATION, "tokenVal");
    }

}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringCloud/202303/5960.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者