SpringCloud——Feign调用时遇到的二个有趣的点

本文探讨Feign调用中GET请求自动转换为POST的问题及解决方案,涉及@RequestBody注解的使用,确保复杂对象的正确传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在写毕业设计的过程中遇到2个关于Feign调用的有趣点

  1. 当你编写Feign时,当你的参数内含有一个普通对象的时候,这里的GET请求在Feign传递过程中便会自动转换成POST请求,就需要按照如下的编写。客户端可以为GET请求,接收前端得到的参数,于此同时服务端就需要改为POST请求

客户端:

@RequestMapping(value = "/list" , method = RequestMethod.GET)
public Object getList(PmsProductQueryParam pmsProductQueryParam,
                       @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
                       @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum){
}

服务端:

@RequestMapping(value = "/list" , method = RequestMethod.POST)
public Object getList(@RequestBody PmsProductQueryParam pmsProductQueryParam,
                       @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
                       @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum){
}

如果你在服务端是GET请求,那么就会报请求的GET请求方式不符的问题(应该是405错误),因为上文所提到的,你的请求类型已经自动被转为POST请求了

  1. 通过Feign传递复杂对象的时候,就会造成传递的对象丢值的问题。依旧是上文的接口,pmsProductQueryParam这个类在传递过程到最后直接丢值,导致接口错误。

Solution:解决办法也很简单,加上@RequestBody注解。原因的话是因为Feign传递过程中会把你想要传递的对象塞入RequestBody中,如果你不加注解,自然也就读取不到这个类的数据了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值