OpenFeign设置header

这篇具有很好参考价值的文章主要介绍了OpenFeign设置header。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

设置Feign的Header信息(五种方式)

概述

在微服务间使用Feign进行远程调用时需要在 header 中添加信息,那么 springcloud open feign 如何设置 header 呢?有5种方式可以设置请求头信息:

  • 在@RequestMapping注解里添加headers属性

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

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

  • 在方法参数前面添加@HeaderMap注解

  • 实现RequestInterceptor接口

示例说明

由于Feign是完全支持Spring MVC注解的, 所以推荐使用前两种Feign设置header的方式, 即: Spring MVC中使用注解设置header.

1. 在@RequestMapping注解里添加headers属性

在application.yml中配置

app.secret: appSecretVal

编写feignClient

@PostMapping(value ="/book/api", headers ={"Content-Type=application/json;charset=UTF-8","App-Secret=${app.secret}"})
voidsaveBook(@RequestBodyBookDto condition);

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

  • 设置单个header属性

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

@PostMapping(value ="/card")
public CardVo createCard(@RequestBodyCardDto condition,@RequestHeaderMultiValueMap<String,String> headers);
查看源码 org.springframework.web.bind.annotation.RequestHeader 说明: If the method parameter is Map<String, String>, MultiValueMap<String, String>, or HttpHeaders then the map is populated with all header names and values.

3. 在方法或者类上添加@Headers的注解

3.1使用feign自带契约
@Configuration
public class Foo Configuration{
    @Bean
    public Contract feignContract(){
    returnnew feign.Contract.Default();
    }
}

FeignClient使用@RequestLine注解, 而未配置feign自带契约Contract时, @Headers不会起作用, 而且启动项目会报错:

Method xxx not annotated with HTTP method type (ex. GET, POST)

查阅官方文档,feign 默认使用的是spring mvc 注解(就是RequestMapping 之类的) ,所以需要通过新增一个配置类来修改其契约 ,即可可以解决该问题了。

@RequestLine is a core Feign annotation, but you are using the SpringCloud@FeignClientwhichusesSpring MVC annotations.
3.2配置@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);
}

使用@Param可以动态配置Header属性

网上很多在说 @Headers不起作用,其实@Headers注解没有生效的原因是:官方的Contract没有生效

4. 在方法参数前面添加@HeaderMap注解

4.1 使用feign自带契约

同上

4.2 配置@HeaderMap注解
@FeignClient(url ="${user.api.url}", name ="user", configuration =FooConfiguration.class)
    publicinterfaceUserFeignClient{
    @RequestLine("GET /simple/{id}")
    publicUserfindById(@Param("id")String id,@HeaderMapHttpHeaders headers);
}

5. 实现RequestInterceptor接口

值得注意的一点是:如果FeignRequestInterceptor注入到spring容器的话就会全局生效, 就是说即使在没有指定configuration属性的FeignClient该配置也会生效, 为什么呢?有兴趣的请看源码分析.

配置@Component或@Service 或 @Configuration 就可以将该配置注入spring容器中, 即可实现全局配置, 从而该项目中的所有FeignClient的feign接口都可以使用该配置.

如果只想给指定FeignClient的feign接口使用该配置, 请勿将该类配置注入spring中.文章来源地址https://www.toymoban.com/news/detail-718781.html

@Configuration
public class FeignRequestInterceptor implements RequestInterceptor{
    @Override
    public void apply(RequestTemplate template){
            template.header(HttpHeaders.AUTHORIZATION,"tokenVal");
        }
}

到了这里,关于OpenFeign设置header的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring Boot】请求参数传json对象,后端采用(pojo)CRUD案例(102)

    请求参数传json对象,后端采用(pojo)接收的前提条件: 1.pom.xml文件加入坐标依赖:jackson-databind 2.Spring Boot 的启动类加注解:@EnableWebMvc 3.Spring Boot 的Controller接受参数采用:@RequestBody 4.postman入参采用json格式 1.pom.xml文件加入坐标: 2.Spring Boot 启动类:加注解:@EnableWebMvc POJO类

    2024年02月14日
    浏览(39)
  • Java中GET请求与POST请求,前端传参与后端接收实例

    此示例以代码方式展现,可直接结合controller层每个接口上方注释与其接口传递参数方式理解! 前端传参直接就以apiPost工具来代替 apiPost调用后端接口几种方式   代码:  controller层: service层: mapper层: xml:

    2024年02月07日
    浏览(54)
  • Chrome浏览器设置header请求 响应头 使用 Chrome ModHeader插件,添加/修改/删除HTTP请求标头和响应标头

    ModHeader插件支持添加/修改/删除请求标头和响应标头,并可以启用基于URL /资源类型的标题修改。 添加扩展程序,并且开启使用 在浏览器右上角的扩展程序中,确认ModHeader是否已经适用 点击modHeader,开启 在窗口的+号上,可以添加其他属性。进行修改,删除,置空 修改heade

    2024年02月11日
    浏览(95)
  • Java设置后端分页

    getPages(Integer.parseInt(String.valueOf(page.getCurrent())),Integer.parseInt(String.valueOf(page.getSize())),dtos); /** * 对list分页 * @param currentPage * @param pageSize * @param list * @return */ private IPage getPages(Integer currentPage, Integer pageSize, List list) { IPage page = new Page(); if(list == null){ return null; } int size = list.size();

    2024年02月06日
    浏览(34)
  • Java后端和前端传递的请求参数的三种类型

    在 HTTP 请求中,常见的请求参数类型有三种:`application/x-www-form-urlencoded`、`multipart/form-data` 和 `application/json`(通常用于 `raw` 类型)。这三种类型主要指的是请求体中的数据格式,其中包括参数的传递方式和编码。 1. **`application/x-www-form-urlencoded`:**    - 这是默认的编码类型

    2024年02月02日
    浏览(48)
  • Java后端07(Spring)

    ​涉及的设计模式:单例模式,简单工厂模式,代理模式,观察者模式,反射,注解。。。。。 ​在传统模式下,对象的创建和赋值,都是由开发者自己手动完成,事实情况下,开发者只关心如何获取赋值好的对象,但是并不希望自己手动进行创建对象和赋值的事情(sprin

    2024年02月13日
    浏览(33)
  • SpringCloud入门(微服务调用 OpenFeign)——从RestTemplate到OpenFeign & OpenFeign的相关配置 & 源码的分析和请求流程拆解

    在之前的博客中,我们介绍了RestTemplate的使用,博客文章如下连接。但是在使用RestTemplate的时候,需要把生产者的路径拼出来,非常繁琐,另外参数的传递的也比较繁琐,解决方案就是使用openFeign。 SpringCloud入门(RestTemplate + Ribbon)——微服务调用的方式 RestTemplate的使用 使

    2024年04月11日
    浏览(37)
  • 前端向Java后端请求blob、arraybuffer类型的数据流

    前端需要获取后端音频文件,但遇到跨域问题,不能直接使用url获取,需求必须使用流将文件传到前端。因此,考虑Java后端读取音频文件,然后向前端发送数据流,前端按后端发送类型将数据接收,并合成其格式文件。 引入axios.min.js文件 其中,responseType:‘arraybuffer’,写成

    2024年02月13日
    浏览(54)
  • CRM项目为新增用户设置对应的前端校验规则并发送Axios请求到后端将表单数据提交用户信息------CRM项目

    template     el-button type=\\\"primary\\\" @click=\\\"addUser()\\\"新增用户/el-button     el-button type=\\\"danger\\\"批量删除/el-button     el-table         :data=\\\"userList\\\"         style=\\\"width: 100%\\\"         @selection-change=\\\"handleSelectionChange\\\"             !-- 复选框    --         el-table-column type=\\\"selection\\\" width=\\\"33%\\\"

    2024年02月19日
    浏览(38)
  • Java后端07(Spring未完成)

    ​涉及的设计模式:单例模式,简单工厂模式,代理模式,观察者模式,反射,注解。。。。。 ​在传统模式下,对象的创建和赋值,都是由开发者自己手动完成,事实情况下,开发者只关心如何获取赋值好的对象,但是并不希望自己手动进行创建对象和赋值的事情(sprin

    2024年02月14日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包