Spring Cloud Function中能否通过Supplier<>获取GET请求头?
在Spring Cloud Function的Supplier<>组件中获取GET请求头的方法
可以获取GET请求头,但由于Supplier<>本身无输入参数,实现方式和Function<>通过Message<>获取的方式略有不同,以下是两种常用方案:
直接通过@Header注解绑定指定请求头
在Supplier的get()方法参数上添加@Header注解,指定请求头名称即可直接获取对应值。如果请求头是可选的,可设置required = false避免请求缺失时报错:import org.springframework.cloud.function.context.function.Supplier; import org.springframework.messaging.handler.annotation.Header; import org.springframework.stereotype.Component; @Component public class HeaderFetchSupplier implements Supplier<String> { @Override public String get(@Header("Authorization") String authHeader, @Header(value = "User-Agent", required = false) String userAgent) { return "Authorization: " + authHeader + "\nUser-Agent: " + (userAgent != null ? userAgent : "未提供"); } }获取所有请求头(基于HTTP上下文)
通过RequestContextHolder获取当前HTTP请求上下文,进而遍历所有请求头:import org.springframework.cloud.function.context.function.Supplier; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.util.Enumeration; @Component public class AllHeadersSupplier implements Supplier<String> { @Override public String get() { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); if (attributes == null) { return "无可用请求上下文"; } HttpServletRequest request = attributes.getRequest(); Enumeration<String> headerNames = request.getHeaderNames(); StringBuilder headerStr = new StringBuilder(); while (headerNames.hasMoreElements()) { String name = headerNames.nextElement(); headerStr.append(name).append(": ").append(request.getHeader(name)).append("\n"); } return headerStr.toString(); } }
注意:在HTTP触发场景下,Spring Cloud Function会自动绑定请求上下文;如果是消息驱动场景(如RabbitMQ/Kafka),则需基于消息通道的头结构调整获取方式。
内容的提问来源于stack exchange,提问作者nikhil bajaj
相关产品推荐
相关产品推荐

