SpringCloud中的Feign远程调用接口传参失败问题
目录
- Feign远程调用接口传参失败
- 这是调用者
- 这是feign的client
- 这是被调者
- Feign远程调用的注意点
- 定义的做远程调用的api接口
- service微服务中的Controller的参数绑定
Feign远程调用接口传参失败 我在做一个微服务调用的时候出现了被调接口传参失败问题
Feign是通过http协议调用服务的,后来发现是因为Gep和Maping不一致,还有使用feign时要记得给实体类加无参构造注解
同时这些注解都尽量一致,不然微服务调bug很麻烦。
这是调用者
文章图片
这是feign的client
文章图片
这是被调者
文章图片
文章图片
【SpringCloud中的Feign远程调用接口传参失败问题】
Feign远程调用的注意点 在使用feign的过程中遇到了一些问题,所以在这里做以下总结:
定义的做远程调用的api接口
中的方法参数列表中的参数都必须都要打上@RequestParam(“value”) 注解**,否则调用会报405异常,这一点是和controller中不一样的,controller中的方法只要参数名和前台传入的参数键名对应上就能自动绑定上参数
复杂类型用必须打上@RequestBody注解
service微服务中的Controller的参数绑定
如果参数列表中有复杂类型,请使用Post请求,使用Get请求会报Bad Request错误,且需要打上@RequestBody注解,而普通基本类型可以不用打上@RequestParam注解可自动绑定参数
如有其它问题,也欢迎补充,放一下代码:
api:
@FeignClient("MS-ADMIN-SERVICE")public interface FixFeignService {@GetMapping("/fix")public ListfindAll(); @PostMapping("/fix/add")public int insert(@RequestBody FixInfo fixInfo); @PostMapping("/fix/limitByParam")public LayUIPageBean limitByParam(@RequestBody FixInfo fixInfo, @RequestParam("page") Integer page, @RequestParam("limit") Integer limit); @PostMapping("/fix/delByIds")public boolean delByIds(@RequestParam("ids[]") Long[] ids); @GetMapping("/fix/findById")public FixInfo findById(@RequestParam("id") Long id); @PostMapping("/fix/update")boolean update(@RequestBody FixInfo fixInfo); }
service微服务
@RestController@RequestMapping("/fix")@Slf4jpublic class FixInfoController {@Autowiredprivate FixInfoService fixInfoService; @GetMapping("")public ListfindAll(){List all = fixInfoService.findAll(); return all; }@PostMapping("/add")public int insert(@RequestBody FixInfo fixInfo){return fixInfoService.insert(fixInfo); }@PostMapping("/limitByParam")public LayUIPageBean limitByParam(@RequestBody FixInfo fixInfo,Integer page,Integer limit){LayUIPageBean layUIPageBean = new LayUIPageBean(); PageHelper.startPage(page,limit); List all = fixInfoService.findByParam(fixInfo); PageInfo pageInfo = new PageInfo<>(all); return layUIPageBean.setCount((int)pageInfo.getTotal()).setData(pageInfo.getList()); }@PostMapping("/delByIds")public boolean delByIds(@RequestParam("ids[]") Long[] ids){//log.info("id"+ids[0]); boolean flag= fixInfoService.delByIds(ids); return flag; }@GetMapping("/findById")public FixInfo findById(Long id){return fixInfoService.findById(id); }@PostMapping("/update")public boolean update(@RequestBody FixInfo fixInfo){return fixInfoService.update(fixInfo); }}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- 如何基于|如何基于 OpenKruise 打破原生 Kubernetes 中的容器运行时操作局限()
- SpringCloud|SpringCloud之Eureka注册中心与Robbin负载均衡
- spring|spring data JPA 中的多属性排序方式
- PyTorch中的torch.cat简单介绍
- Java中的随机数Random
- pytorch中的|pytorch中的 .view()函数的用法介绍
- 测试在项目流程中的那些事儿
- Mybatis|Mybatis Plus 中的LambdaQueryWrapper示例详解
- 程序人生|远程办公中的IT女性(工作量增加3倍,离职率却下降近50%)
- 哨兵|哨兵 双向 java_SpringCloud微服务(Sentinel哨兵组件,管理服务限流和降级)