feign服务调用添加Header参数

feign服务调用添加Header参数

@Configuration
public class FeignConfiguration implements RequestInterceptor {
	
	private static final Logger logger = LoggerFactory.getLogger(FeignConfiguration.class);
	
	@Override
	public void apply(RequestTemplate template) {
		ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
		if(null != attributes) {
			HttpServletRequest request = attributes.getRequest();
	        String token = request.getHeader("token");
	        template.header("token", token);
		}
        logger.info("feign interceptor header:{}",template);
	}
}
### Feign远程调用支持的参数类型 Feign作为声明式的HTTP客户端,其设计目标是为了简化服务间的通信。它支持多种类型的参数绑定到HTTP请求的不同部分,以下是常见的几种参数类型及其使用场景: #### 1. **Path Variables** 通过`@PathVariable`注解可以将方法参数映射到URL路径中的占位符上。这种参数通常用于指定资源的具体标识。 ```java @GetMapping("/user/{id}") User findById(@PathVariable("id") Long id); ``` 上述代码片段展示了如何通过`@PathVariable`将`id`参数绑定到路径变量中[^4]。 #### 2. **Query Parameters** 查询参数可以通过`@RequestParam`注解来实现。这些参数会附加在URL后面,形成类似于`?key=value&key2=value2`的形式。 ```java @GetMapping("/search") List<User> searchUsers(@RequestParam("name") String name, @RequestParam("age") Integer age); ``` 此示例说明了如何利用`@RequestParam`传递多个查询参数给服务器端[^2]。 #### 3. **Request Body** 对于POST或PUT请求,数据体内的内容可通过`@RequestBody`注解进行传输。这适用于复杂的对象或者大量数据的情况。 ```java @PostMapping("/create") ResponseEntity<String> createUser(@RequestBody User user); ``` 这段代码表明当创建新用户时,整个`User`对象会被序列化并入请求主体内发送出去。 #### 4. **Headers** 有时我们需要自定义请求头信息,比如认证令牌或者其他元数据。这时就可以借助于`@RequestHeader`注解完成这一需求。 ```java @GetMapping("/secure-data") String getSecureData(@RequestHeader("Authorization") String token); ``` 在这里可以看到,我们能够轻松地向每次请求添加特定头部字段。 #### 5. **Form Data** 如果要上传表单数据,则应该考虑使用`@ModelAttribute`或者是直接操作多部件实体的方式;不过更常见的是配合Spring MVC框架下的形式处理机制一起工作。 ```java @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) void uploadFile(@ModelAttribute FileUpload fileUpload); ``` 尽管上面的例子并非严格意义上的Feign功能展示,但它确实反映了实际开发过程中可能遇到的需求之一。 ### 总结 综上所述,Feign提供了灵活丰富的选项让用户可以根据具体业务逻辑选择合适的参数类型来进行远程过程调用(RPC),从而极大地提高了微服务体系架构下不同模块之间协作效率的同时也降低了复杂度[^1]. ```java // 示例综合应用 package cn.zsh.order.client; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; @FeignClient("example-service") public interface ExampleServiceClient { @GetMapping("/data/{id}") ResponseEntity<DataModel> getDataById( @PathVariable("id") long id, @RequestParam(required = false) String filter); @PostMapping("/submit") void submitData(@RequestBody ComplexObject data); @GetMapping("/headers") String checkCustomHeader(@RequestHeader("X-Custom-Header") String customHeaderValue); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值