SpringCloud系列:OpenFeign组件(续)-服务调用的参数传递

442 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情

作者平台:

| CSDN:blog.csdn.net/qq\_4115394…

| 掘金:juejin.cn/user/651387…

| 知乎:www.zhihu.com/people/1024…

| GitHub:github.com/JiangXia-10…

| 微信公众号:1024笔记

本文一共1338字,预计阅读7分钟

前言

前面文章SpringCloud系列:OpenFeign组件对于Spring Cloud的OpenFeign组件进行了简单介绍,并且演示了如何使用Openfeign组件进行服务调用,可以发现OpenFeign组件确实能够解决resttemplate所实现的服务间通信的所有问题,并且使用比resttemplate简单高效。但是在使用OpenFeign组件时还有一些坑或者说细节需要注意,今天这篇文章就继续OpenFeign的学习。

正文

我们在使用SpringBoot进行开发时,经常会遇到的场景就是参数的传递,这时候我们只需要在请求的url中加入具体的参数,然后在后台接口接受就行,具体可以参考Springboot处理请求参数的注解,比如:

 @RequestMapping("/testequestparam")
    public String testequestParam(@RequestParam("name") String name){
        return name+",你好啊!";
    }

所以在微服务中进行服务接口的调用,肯定也会存在参数的情况,不会像上篇文章一样,那么简单,那么是否也可以这样直接调用呢?

比如被调用服务的接口:

那么需要在调用方的feignclient接口中加上这个方法:

然后在调用方的具体接口中直接调用即可:

但是项目启动时,发现会报下面的错误,意思是:test方法有太多的参数。说明这种方法并不可行。

Springboot处理请求参数的注解文章中介绍过这里的参数传递有四种形式,一种是类似于下面地址的querystring类型的请求格式:

http://localhost:8085/customer1?name=亚索&age=32

这里需要对ProductClient接口中的方法进行改造,对于这种请求格式需要使用的是@RequestParam注解:

启动项目,没有报错,并且请求成功:

对于第二种的请求格式,比如下方的路径传参形式的,需要使用的则是@PathVariable注解:

http://localhost:8085/customer1/亚索/32

被调用方接口:

调用方feignclient接口:

具体方法:

启动项目,浏览器输入请求地址:

除了上述两种请求传参形式外,还有一种就是对象类型的参数。

这种情况下,首先创建一个被调用方的接口,如下:

  @GetMapping("/customer3")
    public String customer3(){
        LOGGER.info("消费服务正在调用");
        String product = productClient.test2(new Product(1,20.33,"劫"));
        return "customer3正在调用消费服务  "+product;
    }

然后在调用方的openfeign的接口中需要使用@RequestBody注解:

    @PostMapping("/test2")
    String test2(@RequestBody Product product);

调用方的接口入下:

  @GetMapping("/customer3")
    public String customer3(){
        LOGGER.info("消费服务正在调用");
        String product = productClient.test2(new Product(1,20.33,"劫"));
        return "customer3正在调用消费服务  "+product;
    }

除此还有实体类代码如下

启动项目,浏览器输入地址:

http://localhost:8085/customer3

结果如下:

image.png

image.png

服务之间通信正常,接口能正常被调用!

在使用Json方式在openfeign接口声明中必须给参数使用@RequestBody注解。

总结

以上就是在使用OpenFeign在微服务中进行服务调用的过程中,涉及到参数需要处理的时候的几种处理方式,主要还是参数注解的使用,所以可以参考之前的文章:Springboot处理请求参数的注解

如果有任何问题或者不正确的地方,欢迎交流讨论

本文源码地址:github.com/JiangXia-10…

相关推荐: