feign get方法使用对象参数在方法形参传值的时候服务端一直值为null

本文详细解析了在使用Feign时如何正确应用@RequestBody注解,确保请求参数能够被正确接收和处理,对于理解Feign的工作原理及解决相关问题具有指导意义。

解决办法:需要在的方法参数前面写 注解 @RequestBody,在fegin接口的参数上也要写

 

是的,**Feign Client 中可以使用 `@GetMapping`(即 GET 方法)**,但有一些限制和注意事项。下面我会详细解释。 --- ## ✅ 一、Feign Client 中使用 GET 方法的正确方式 Feign 支持标准的 Spring MVC 注解,包括: - `@GetMapping` - `@PostMapping` - `@PutMapping` - `@DeleteMapping` 所以你可以这样定义一个使用 GET 方法Feign Client: ```java @FeignClient(name = "zy-api") public interface AccountClient { @GetMapping("/account/getBalance") BigDecimal getBalance(@RequestParam("userId") String userId); } ``` ### ✅ 对应的服务端 Controller 示例: ```java @RestController @RequestMapping("/account") public class AccountController { @GetMapping("/getBalance") public BigDecimal getBalance(@RequestParam("userId") String userId) { return accountService.getBalance(userId); } } ``` --- ## ❌ 二、GET 方法不能携带 `@RequestBody` ### 重要限制: > **GET 请求不能使用 `@RequestBody`,因为 HTTP 协议规定 GET 请求没有请求体(body)。** 如果你这样写: ```java @FeignClient(name = "zy-api") public interface AccountClient { @GetMapping("/account/getBalance") BigDecimal getBalance(@RequestBody User user); // ❌ 错误用法 } ``` 这段代码在编译时不会报错,但运行时会抛出异常或参数无法正确递。 ### ✅ 正确方式: 使用 `@RequestParam` 或者 `@SpringQueryMap`(Feign 特有)来对象参数。 #### 方法 1:使用 `@RequestParam` 简单参数 ```java @GetMapping("/account/getBalance") BigDecimal getBalance(@RequestParam("userId") String userId); ``` #### 方法 2:使用 `@SpringQueryMap` 对象参数(推荐) ```java @FeignClient(name = "zy-api") public interface AccountClient { @GetMapping("/account/getBalance") BigDecimal getBalance(@SpringQueryMap User user); } ``` ```java public class User { private String userId; private String token; // getter/setter } ``` Feign 会自动将 `User` 对象的字段转换为查询参数,例如: ``` /account/getBalance?userId=123&token=abc ``` --- ## ✅ 三、GET 方法的适用场景 | 场景 | 是否适合使用 GET | |------|------------------| | 查询数据(如获取余额) | ✅ 适合 | | 无需修改服务器状态 | ✅ 适合 | | 需要递大量参数 | ❌ 不太适合(URL 长度有限制) | | 递敏感信息(如密码) | ❌ 不安全(参数暴露在 URL 中) | | 需要递 JSON Body | ❌ 不支持 | --- ## ✅ 四、总结 | 使用方式 | 是否支持 | 说明 | |----------|----------|------| | `@GetMapping` | ✅ 支持 | 用于获取资源 | | `@PostMapping` | ✅ 支持 | 用于提交数据 | | `@RequestBody` with GET | ❌ 不支持 | GET 请求无 body | | `@RequestParam` with GET | ✅ 支持 | 推荐方式 | | `@SpringQueryMap` with GET | ✅ 支持 | 对象参数更方便 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值