持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
作者平台:
| CSDN:blog.csdn.net/qq\_4115394…
| 知乎: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
结果如下:
服务之间通信正常,接口能正常被调用!
在使用Json方式在openfeign接口声明中必须给参数使用@RequestBody注解。
总结
以上就是在使用OpenFeign在微服务中进行服务调用的过程中,涉及到参数需要处理的时候的几种处理方式,主要还是参数注解的使用,所以可以参考之前的文章:Springboot处理请求参数的注解。
如果有任何问题或者不正确的地方,欢迎交流讨论
本文源码地址:github.com/JiangXia-10…
相关推荐: