Netflix Feign @HeaderMap 注解

@HeaderMap 是 Netflix Feign 中的一个注解,主要用于将一个 Map 类型的对象中的键值对作为 HTTP  请求头添加到 Feign 客户端发送的请求中。

在实际应用中,当需要动态地设置请求头,或者根据不同的业务逻辑添加多个自定义请求头时,这个注解非常有用。它提供了一种灵活的方式来传递请求头信息,比如认证令牌、用户代理信息、内容类型等。

应用示例

假设你有一个服务需要进行纯文本数据交互并且需要传递认证信息。可以像下面这么做:

(1)服务代码:

@GetMapping("/header1")
public String header1(@RequestHeader("Custom-Header") String customHeader,
                      @RequestHeader("Authorization") String token,
                      @RequestHeader("Content-Type") String contentType) {
    return "Custom-Header=" + customHeader +
            "<br/>Authorization=" + token +
            "<br/>Content-Type=" + contentType;
}

(2)Feign 客户端接口定义:

@RequestLine("GET /simple/header1")
String header2(@HeaderMap Map<String,String> headers);

(3)调用 Feign 客户端:

@GetMapping("/")
public String index() {
    Map<String,String> headers = new HashMap<>();
    headers.put("Authorization", "Bearer e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
    headers.put("Content-Type", "text/plain");
    return SimpleFeign.create().header2(headers);
}

输出结果如下:

4d890636b36d0a3e5b192ec902277b17_1730442794828-199a650e-9908-435b-ba04-1b7a194c43ae.png

源码分析

下面是 @HeaderMap 注解的源码:

package feign;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface HeaderMap {
}

从源码看,@HeaderMap 注解仅是一个标记注解,没有提供属性。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号