使用feign客户端传参接收不到的问题及解决

目录
  • feign客户端传参接收不到
    • 先来说一下流程
    • 我们来看下代码
    • 如何解决
  • feign传递参数!坑!

feign客户端传参接收不到

使用feign客户端做不用服务之间的调用的时候出现了provider获取不到参数的问题,在此记录一下。

先来说一下流程

在我的微服务中,有这么几个角色,consumer: 服务的消费者,provider:服务的消费者,还有一个feign,主要就是provider的接口形式,然后consumer依赖了feign,去调用provider中的服务,我在provider中打印获取的参数,一直为空。

我这里,consumer, feign,provider都是单独的模块

我们来看下代码

首先是provider:提供了一个保存用户的服务

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
 
    @PostMapping("/save")
    public String save(User user){
        log.info("provider: 处理save请求,参数为:{}",user);
        return "success";
    }

feign代码:注意这个模块要添加feign依赖

@FeignClient(name = "service-provider",fallback = UserHystrix.class)
public interface UserController {
 
    @PostMapping("/user/save")
    String save(User user); 
}

然后使用consumer通过feign调用provider:注意 consumer依赖feign,上代码:

@RestController
@Slf4j
public class FeignController {
 
    @Autowired
    private UserController userController;
 
    @RequestMapping("/feign")
    public String test(){
        User user = new User();
        user.setName("zhangsan");
        user.setAge(10);
        log.info("feign调用开始。。。。");
        String result = userController.save(user);
        log.info("feign: 返回: {}", result);
        return "success";
    }   
}

各自服务启动后,浏览器调用consumer的 /feign请求,观察provider日志,发现获取到的User参数没有值。

如何解决

在provider中的方法里的User参数前面,加上  @RequestBody ,注意下面代码中的注释部分

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
 
    @PostMapping("/save")
    // 注意加上requestBody,否则容易接收不到参数
    public String save(@RequestBody User user){
        log.info("provider: 处理save请求,参数为:{}",user);
        return "success";
    } 
}

好了,为了方便大家观看,在给出以下项目结构吧:

feign传递参数!坑!

以下是FeignClient 注解的接口 中的一个抽象方法

@PostMapping("/bizTask/selectNonCompleteByShopIds")
List<BizTask> selectNonCompleteByShopIds(@RequestBody List<Long> shopIds); 

注意这里接口参数 shopIds,该方法的参数列表也必须和抽象方法一致,否则接不到参数

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

(0)

相关推荐

  • 解决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

  • SpringCloud Feign多参数传递及需要注意的问题

    目录 Feign多参数传递及注意的问题 在服务提供者cloud-shop-userservice中新增几个方法 修改feign的UserService,新增对应的方法 在feign的controller中调用方法 重启修改过的服务,查看服务注册是否正常 使用工具调用这几个方法进行测试 Feign如何接收多个参数 1.API 2.Feign 3.controller Feign多参数传递及注意的问题 这边沿用前面的Eureka,Feign,Service 在服务提供者cloud-shop-user

  • Springcloud feign传日期类型参数报错的解决方案

    目录 feign传日期类型参数报错 Date类型参数报错 LocalDate类型报错 feign传参问题及传输Date类型参数时差的坑 下面说说两种解决方案 feign传参时候使用@DateTimeFormat注解的坑 feign传日期类型参数报错 Date类型参数报错 在Spring cloud feign接口中传递Date类型参数时报错,报错信息. 场景: 客户端传递一个new Date()的参数,服务端接受的参数和客户端有时间差. 客户端打印格式化的new Date(): 2018-05-

  • 使用feign客户端传参接收不到的问题及解决

    目录 feign客户端传参接收不到 先来说一下流程 我们来看下代码 如何解决 feign传递参数!坑! feign客户端传参接收不到 使用feign客户端做不用服务之间的调用的时候出现了provider获取不到参数的问题,在此记录一下. 先来说一下流程 在我的微服务中,有这么几个角色,consumer: 服务的消费者,provider:服务的消费者,还有一个feign,主要就是provider的接口形式,然后consumer依赖了feign,去调用provider中的服务,我在provider中

  • SpringCloud:feign对象传参和普通传参及遇到的坑解决

    目录 feign对象传参和普通传参及遇到的坑 对象传参 普通传参 遇到的坑-1 遇到的坑-2 feign传递复杂参数对象需要注意的地方 传递复杂参数对象需要用Post 在传递的过程中 feign对象传参和普通传参及遇到的坑 对象传参 使用@RequestBody来指定传参对象 @RequestMapping(value = "/v2/matterCode/genCode", method = RequestMethod.POST)     ResultResponse<Strin

  • 浅析vue-router jquery和params传参(接收参数)$router $route的区别

    今天做项目时踩到了vue-router传参的坑(jquery和params),所以决定总结一下二者的区别. 1.jquery方式传参和接收参数 传参: this.$router.push({ path:'/xxx' query:{ id:id } }) 接收参数: this.$route.query.id 注意:传参是this.$router,接收参数是this.$route,这里千万要看清了!!! this.$router 和this.$route有何区别? 在控制台打印两者可以很明显的看出两

  • vue路由传参接收以及传参对象为对象时的问题及解决

    目录 路由传参接收以及传参对象为对象时的问题 场景 接收路由参数 vue路由传参总结 Vue路由传参 路由传参接收以及传参对象为对象时的问题 具体代码如下所示: 场景 <div @click='toDetail'>查看详情</div> 路由传参不能直接传一个对象,需要使用JSON.stringify()方法将其转换成一个字符串,然后在其他页面接受的时候再使用JSON.parse()方法转换成一个对象 const router = useRouter() const toDetail

  • Feign调用中的两种Header传参方式小结

    目录 Feign调用中的两种Header传参方式 在请求拦截器中统一配置 通过@RequestHeader注解 调用feign接口时,如何往header中添加参数 总结 Feign调用中的两种Header传参方式 在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端. 我们可以使用JDK原生的URLConnection.Apache的Http Client.Netty的异步HTTP Client, Spri

  • 关于Feign调用服务Headers传参问题

    目录 Feign调用服务Headers传参 我们可以使用RequestInterceptor来实现 Feign设置Header头部,@Headers无效 于是开启feign的日志 于是debug调试 Feign调用服务Headers传参 在使用springcloud中经常会出现个服务调用,一般情况下会在Headers加上token的验证,那么在feign调用时候我们怎么去传这个token过去呢,有人会用@Headers这个注解来实现.但是这样方法太多笨重. 我们可以使用RequestInterc

  • Winform客户端向web地址传参接收参数的方法

    在web端定义js方法去接收客户端传递过来的参数,具体就是获取地址中?后的数据,各个参数用&分割,存储于数组中,获取. 具体如下: //定义获取地址中参数的方法 function GetRequest() { var url = location.search; var theRequest = new Object(); if (url.indexOf("?") != -1) { var str = url.substr(1); strs = str.split("

  • jsp传参 servlet接收中文乱码问题的解决方法

    在公司实习了8个月,一直都是做android和h5的,但是发现做程序连一点服务都不会该怎么办,所以最近开始学起了java,不知道是不是因为框架学多了,现在看起springmvc框架比以前看起来简单太多了,这里我是准备从hibernate开始学习,毕竟数据是根本嘛,首先我用的是hibernate+servlet,但是在jsp页面传参到servlet的时候中文一直乱码,我尝试了好多方法,最后还是解决了. 第一,首先看清项目的编码,jsp页面的编码 第二,修改tomcat 下面的server.xml文

  • C#打开php链接传参然后接收返回值的关键代码

    php代码 一.php <?php header("Content-Type:text/html;charset=UTF-8"); $u=$_POST['zdupdate']; $p=$_POST['pid']; $a=$_POST["afid"]; $d=$_POST["dtime"]; require('../db/conn.php');//打开文件 $sql_expire="insert into `m-haibook`.t

  • 基于feign传参MultipartFile问题解决

    目录 feign传参MultipartFile问题 首先引入依赖 新建feign的配置 在feign接口中配置 Feign传输MultipartFile的一些问题 File转MultipartFile feign传参MultipartFile问题 首先,feign服务之间的调用,传参默认的格式为:ContentType=application/x-www-form-urlencoded 以表单的形式传参的,而文件流的传参,需要form-data的ContentType,否则会报错的 首先引入依赖

随机推荐