使用Feign调用服务的问题
最近在搞微服务的东西,系统A提供了一个服务,定义方式:
@RequestMapping(value = "/hasSuberList", method = RequestMethod.GET)
@ResponseBody
public String hasSuberList(List<String> peIdList){
if(peIdList == null || peIdList.size() == 0){
return "error";
}
List<String> list = mqttService.hasSuberList(peIdList);
return JSONArray.fromObject(list).toString();
}
系统B使用Feign进行访问,接口定义方式如下:
@FeignClient(value = "pe-processor")
public interface PeFeignInter { @RequestMapping(value="/mqtt/hasSuberList")
public String getTheSuberList(List<String> peId); @RequestMapping(value="/service/generalInterface")
public String petojson(String petojson); }
下面进行服务调用的时候,服务提供方也就是A系统总是包不支持POST请求的异常。
提供服务的接口定义的是GET请求,肯定是服务Feign请求时采用了POST方法,于是修改接口:
@FeignClient(value = "pe-processor")
public interface PeFeignInter { @RequestMapping(value="/mqtt/hasSuberList",method = RequestMethod.GET)
public String getTheSuberList(List<String> peId); @RequestMapping(value="/service/generalInterface",method = RequestMethod.POST)
public String petojson(String petojson); }
发现还是不行,还是发送GET请求,那么如何定义Feign请求时的请求类型呢?
feign消费服务时,以GET方式请求的条件:
如果想让服务消费者采用GET方式调用服务提供者,那么需要:
1.服务消费者这边feign调用时,在所有参数前加上@RequestParam注解。
2.服务消费者这边feign调用时,指明为GET方式(注:如果不指明method,那么在条件1满足的情况下,采用的是默认的GET方式)。
注:这里条件1和条件2,是“且”的关系(都满足时,才为GET)。
feign消费服务时,以POST方式请求的条件:
如果想让服务消费者采用POST方式调用服务提供者,那么只需要:
1.服务消费者这边feign调用时,在所有参数前加上@RequestParam注解,并指明feign消费服务的方式为POST。
2.服务消费者这边feign调用时,有且只有一个参数前为@RequestBody或什么也没有(如果有多个参数,那么其余参数前必须有@RequestParam)。
注:这里条件1和条件2,是“或”的关系(当至少一个满足时,即为POST)。
注:在服务消费者中,使用feign消费服务时,如果参数前什么也不写,那么默认是由@RequestBody指明的。
即:只要不满足GET方式请求,那么POST方式请求是一定支持的。
原来是Feign接口参数前什么也没加,默认使用POST方式请求导致的。
下面对服务提供者进行修改,并且如果要接收List,参数前需要加@RequestBody注解(该方式只支持POST请求),
@RequestMapping(value = "/hasSuberList", method = RequestMethod.POST)
@ResponseBody
public String hasSuberList(@RequestBody List<String> peIdList){
if(peIdList == null || peIdList.size() == 0){
return "error";
}
List<String> list = mqttService.hasSuberList(peIdList);
return JSONArray.fromObject(list).toString();
}
再次访问,能够进入到方法。此时又出现了新的问题,服务消费者总是报连接超时,
以前接触过类似的错误,所以立马感觉是超时参数配置的问题,于是配置了ribbon的超时参数(在application.properties中):

再次访问,成功。
使用Feign调用服务的问题的更多相关文章
- 订单服务,使用feign调用服务
通过feign实现订单中心(feign调用服务,在orderservice中调用product-server) 1.copy orderserver 为orderserverfeign ...
- Spring Cloud 使用Feign调用服务传递Header中的参数
1.使用Feign 调用其他微服务,尤其是在多级调用的同时,需要将一些共同的参数传递至下一个服务,如:token.比较方便的做法是放在请求头中,在Feign调用的同时自动将参数放到restTempla ...
- Spring Boot 和 Spring Cloud Feign调用服务及传递参数踩坑记录
背景 :在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端.我们可以使用JDK原生的URLConnectio ...
- SpringCloud使用Feign调用服务时,@FeignClient注解无法使用
关于解决这个问题的理论根源传送门:https://blog.csdn.net/alinyua/article/details/80070890我在这里只提供解决方案 0. 结论和解决方案 Spring ...
- spring cloud feign 调用服务注意问题
服务端 rest api @RequestMapping(value = "/phone") public ResponsePhone getPhone(@RequestParam ...
- 使用feign调用服务的时候注意的问题
服务端 rest api @RequestMapping(value = "/phone") public ResponsePhone getPhone(@RequestParam ...
- 使用springcloud的feign调用服务时出现的错误:关于实体转换成json错误的介绍
http://blog.csdn.net/java_huashan/article/details/46428971 原因:实体中没有添加无参的构造函数 fastjson的解释: http://www ...
- Spring Boot 和 Spring Cloud Feign调用服务及传递参数踩坑记录(转)
https://blog.csdn.net/uotail/article/details/84673347
- spring cloud 微服务调用--ribbon和feign调用
这里介绍ribbon和feign调用两种通信服务调用方式,同时介绍如何引入第三方服务调用.案例包括了ribbon负载均衡和hystrix熔断--服务降级的处理,以及feign声明式服务调用.例子包括s ...
随机推荐
- [Java Web学习]Spring MVC使用普通类对象,声明的对象为null
由于对Spring还不熟悉,目前还处于学习阶段,因此经常会遇到一些小白问题,这个问题需要在Spring文件中将普通对象注入bean,然后在MVC中添加set方法,填充普通对象.
- antd-vue按需加载插件babel-plugin-import报错
报错.bezierEasingMixin().百度了一下是Less版本太高的原因,我都迷了,还有太新的过... 解决方法:将less版本降到3.0以下 因为我是用的npm生成的vue项目.所以cmd命 ...
- 私有IP
私有IP地址段为10.0.0.0-10.255.255.255,172.16.0.0-172.31.255.255,192.168.0.0-192.168.255.255.
- github上传代码返回403错误
报错代码: **************** 表示上传的项目地址 remote: Permission to Jayson00/camera.git denied to Minelinkinpar ...
- 使用samba共享文件夹,提供给window访问
1. 下载yumdownloader yum install -y yum-utils 2. 下载samba mkdir samba cd samba yumdownloader --resolve ...
- PythonStudy——闭包
# closure:被包裹的函数,称之为闭包 # 完整的闭包结构:1.将函数进行闭包处理:2.提升函数名的作用域 # 案例:延迟加载 def get_site(url): #url='https:// ...
- Docker系列(四)Centos6.5 搭建私人镜像仓库 v2
.下载.运行registry 下载registry镜像: $ docker pull hub.c.163.com/library/registry 这个下载的过程有点长,耐心等待一下.O(∩_∩)O哈 ...
- linux下tomcat启动慢解决方法
前言 最近在工作中遇到一个问题,在Linux下Tomcat 8启动很慢,且日志上无任何错误,在日志中查看到如下信息: Log4j:[2017-08-2715:47:11] INFO ReadPrope ...
- java 实现小数取最后一位、四舍五入
//获得最后一位 double a = 3.24; String b = String.valueOf(a); char c[] = b.toCharArray(); System.out.print ...
- IOS屏幕旋转思路和实践
这段时间同事在做一个直播项目,项目有个需求:一个界面需要手动设置屏幕的方向,设置好之后方向不能变化.完成这个需求花了特别大的精力,归因是网上关于屏幕旋转的知识比较凌乱,解决问题花费不少时间,最后决定把 ...