SpringCloud中的Feign远程调用接口传参失败问题

目录
  • Feign远程调用接口传参失败
    • 这是调用者
    • 这是feign的client
    • 这是被调者
  • Feign远程调用的注意点
    • 定义的做远程调用的api接口
    • service微服务中的Controller的参数绑定

Feign远程调用接口传参失败

我在做一个微服务调用的时候出现了被调接口传参失败问题

Feign是通过http协议调用服务的,后来发现是因为Gep和Maping不一致,还有使用feign时要记得给实体类加无参构造注解

同时这些注解都尽量一致,不然微服务调bug很麻烦。

这是调用者

这是feign的client

这是被调者

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 List<FixInfo> findAll();
    @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")
@Slf4j
public class FixInfoController {
    @Autowired
    private FixInfoService fixInfoService;
    @GetMapping("")
    public List<FixInfo> findAll(){
        List<FixInfo> 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<FixInfo> all = fixInfoService.findByParam(fixInfo);
        PageInfo<FixInfo> 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);
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Spring cloud踩坑记录之使用feignclient远程调用服务404的方法

    前言 公司项目进行微服务改造,由之前的dubbo改用SpringCloud,微服务之间通过FeignClient进行调用,今天在测试的时候,eureka注册中心有相应的服务,但feignclient就是无法调通,一直报404错误,排查过程如下: 一.问题: 服务提供方定义的接口如下: /** * 黑白名单查询接口 * * @author LiJunJun * @since 2018/10/18 */ @Component(value = "blackAndWhiteListFeignClient

  • 解决SpringCloud Feign传对象参数调用失败的问题

    SpringCloud Feign传对象参数调用失败 不支持GET请求方式 使用Apache HttpClient替换Feign原生httpclient @RequestBody接收json参数 bootstrap-local.yml feign: httpclient: enabled: true pom.xml <!-- 使用Apache HttpClient替换Feign原生httpclient --> <dependency> <groupId>com.netf

  • SpringBoot如何使用feign实现远程接口调用和错误熔断

    这篇文章主要介绍了SpringBoot如何使用feign实现远程接口调用和错误熔断,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.第一步,新建两个简单的springboot项目并创建rest接口 demo系统的rest接口 plus系统的调用接口 2.在项目pom文件里导入feign和hystrix的pom依赖包 <properties> <java.version>1.8</java.version> <s

  • SpringCloud之Feign远程接口映射的实现

    一.简介 SpringCloud是基于Restful的远程调用框架,引入Ribbon负载均衡组件后还需要客户端使用RestTemplate调用远程接口,操作起来还显得繁琐.SpringCloud提供了远程接口映射,将远程Restful服务映射为远程接口,消费端注入远程接口即可实现方法调用. 二.流程 1.新建远程接口映射模块service-api,并引入Feign接口映射依赖 <dependencies> <dependency> <groupId>org.spring

  • SpringCloud Feign参数问题及解决方法

    这篇文章主要介绍了SpringCloud Feign参数问题及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天遇到使用Feign调用微服务,传递参数时遇到几个问题 1.无参数 以GET方式请求 服务提供者 @RequestMapping("/hello") public String Hello(){ return "hello,provider"; } 服务消费者 @GetMapping("

  • SpringCloud中的Feign远程调用接口传参失败问题

    目录 Feign远程调用接口传参失败 这是调用者 这是feign的client 这是被调者 Feign远程调用的注意点 定义的做远程调用的api接口 service微服务中的Controller的参数绑定 Feign远程调用接口传参失败 我在做一个微服务调用的时候出现了被调接口传参失败问题 Feign是通过http协议调用服务的,后来发现是因为Gep和Maping不一致,还有使用feign时要记得给实体类加无参构造注解 同时这些注解都尽量一致,不然微服务调bug很麻烦. 这是调用者 这是feig

  • SpringCloud学习笔记之Feign远程调用

    目录 前言 1.Feign替代RestTemplate 1.1 引入依赖 1.2 添加注释 1.3 编写Feign的客户端 1.4 测试 1.5 总结 2.自定义配置 2.1 配置文件方式 2.2 Java代码方式 3.Feign使用优化 4.最佳实践 4.1 继承方式 4.2 抽取方式 4.3 实现基于抽取的最佳实践 抽取 前言 为啥需要学Feign呢?我们先来回顾之前写的代码 先来看我们以前利用RestTemplate发起远程调用的代码: 这里就有几个问题: 代码可读性差,编程体验不统一 参

  • SpringCloud Feign远程调用实现详解

    目录 1. Feign远程调用 1.1.Feign替代RestTemplate 1.2.自定义配置 1.2.1.配置文件方式 1.2.2.Java代码方式 2.Feign使用优化 3. 最佳实践 3.1.继承方式 3.2.抽取方式 3.3.实现基于抽取的最佳实践 先来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: 代码可读性差,编程体验不统一 参数复杂URL难以维护 1. Feign远程调用 Feign是一个声明式的http客户端,官方地址:https://gith

  • Feign远程调用参数里面内容丢失的解决方案

    目录 Feign远程调用参数里面内容丢失 举个例子 解决方法 Feign远程调用细节--丢失数据 同步调用 异步调用 Feign远程调用参数里面内容丢失 举个例子 服务A提供了如下接口(注意这里的参数url是一个地址): @GetMapping("/getSample") public String getSample(@RequestParam String url){      //此处省略逻辑...... } 服务B需要调用服务A的接口,调用如下: sampleFeignClie

  • Feign远程调用传递对象参数并返回自定义分页数据的过程解析

    目录 Feign介绍 Feign测试 1.在yml文件里面增加了配置信息 2.在客户端pom.xml文件中引入的依赖(消费者端) 3.服务调用端接口为 4.服务调用端Service代码 5.服务调用端Fallback为 6.服务提供端代码为 7.测试 Feign调用分页接口报错:MethodhastoomanyBodyparameters 解决方法 Feign介绍 Feign是Netflix公司开源的轻量级rest客户端,使用Feign可以非常方便的实现Http 客户端.Spring Cloud

  • feign远程调用无法传递对象属性405的问题

    目录 feign远程调用无法传递对象属性 get请求405错误 使用feign请求远端 客户端 服务端 feign.FeignException$MethodNotAllowed status405readingxxx#yyy(Integer) 异常信息 详细信息 解决方案 feign远程调用无法传递对象属性 get请求405错误 通过查看feign底层源码,feign底层使用的是httpurlconnection的工具,而进行传递body的时候,会调用getOutputStrean方法,里边会

  • 分布式医疗挂号系统Nacos微服务Feign远程调用数据字典

    目录 步骤1:向Nacos服务中心注册微服务 (1)引入Nacos依赖 步骤2:使用Feign进行远程调用 (1)service-hosp医院列表接口 (2)service-cmn医院等级/地址接口 (3)引入Feign依赖 (4)调用端通过包扫描Feign (5)远程调用 步骤3:使用swagger测试 需求:制作一个医院列表的显示功能.列表中包含医院编号.医院等级.医院地址.状态等.分析:首先确定是典型的条件查询带分页.由于医院的等级需要查询数据字典部分,这个调用是在不同的微服务模块中,这就

  • openstack中的rpc远程调用的方法

    众所周知,OpenStack的通信方式有两种,一种是基于HTTP协议的RESTFul API方式,另一种则是RPC调用.两种通信方式的应用场景有所不同,在OpenStack中,前者主要用于各组件之间的通信(如nova与glance的通信),而后者则用于同一组件中各个不同模块之间的通信(如nova组件中nova-compute与nova-scheduler的通信). nova中rpc调用非常多,用pycharm点点点跟函数的时候遇到rpc就会点不下去了,不解决直接就看不下去了那种多法 什么是 RP

  • Feign远程调用Multipartfile参数处理

    目录 Feign远程调用Multipartfile参数 解决方案 Feign远程调用传参问题 Feign远程调用Multipartfile参数 今天在写业务代码的时候遇到的问题, 前端请求A服务,能正确把参数给到A服务<参数里面包括文件类型的 Multipartfile>,但是当A服务调用B服务时把文件参数丢过去,那边接收不到,并且会报Multipartfile 参数错误. 在网上找到了答案,特此记录一下: 解决方案 必须的 在你的fegin 服务接口暴露的地方新建一个配置类. package

  • 使用Feign远程调用时,序列化对象失败的解决

    Feign远程调用序列化对象失败 最近在搭建一个SpringCloud的微服务时,遇到了一个问题,在使用Feign远程调用时报错,返回对象没有无参构造方法,有其他的含参数的构造方法. 本地自己搭建的微服务目录大概如下,才刚开始,后续会逐渐补充优化迭代,有兴趣的可以fork下地址: https://github.com/zhanghailang123/MyCloud 给与指导意见. Eureka:注册中心服务端,采用Eureka注册中心 EurekaClientA:其中的一个Eureka服务端,命

随机推荐