Feign远程调用传递对象参数并返回自定义分页数据的方法(feign,开发技术)

时间:2024-05-05 20:37:02 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    Feign%E8%BF%9C%E7%A8%8B%E8%B0%83%E7%94%A8%E4%BC%A0%E9%80%92%E5%AF%B9%E8%B1%A1%E5%8F%82%E6%95%B0%E5%B9%B6%E8%BF%94%E5%9B%9E%E8%87%AA%E5%AE%9A%E4%B9%89%E5%88%86%E9%A1%B5%E6%95%B0%E6%8D%AE%E7%9A%84%E6%96%B9%E6%B3%95

Feign是Netflix公司开源的轻量级rest客户端,使用Feign可以非常方便的实现Http 客户端。Spring Cloud引入Feign并且集成了Ribbon实现客户端负载均衡调用。

此处注意

此处依赖为什么使用io.github.openfeign的httpclient,而不使用Apache 的HttpClient替换Feign原生httpclient。

看了很多文章,都是说引用这个依赖:

但是不知道哪里的问题,在获取返回结果时一直报错:

Caused by: java.lang.NoSuchMethodError: feign.Response.create(ILjava/lang/String;Ljava/util/Map;Lfeign/Response$Body;)Lfeign/Response;

查看源码得知,openfeign在接受返回值时调用的不是httpclient的feign-core包的代码而是调用的本身的feign-core的代码,而本身的feign-core包中的Response类没有create方法。两个feign-core包中的Retryer接口不一致导致的,openfeign的feign-core版本为10.1.0 httpclient的版本为8.16.1。

找了半天问题,最后就把httpclient的依赖换成代码块中的依赖就OK了。

此处使用POST请求,第6步有解释。

我的TourismAdQuery类继承了Page类(似乎没有影响)

此处@PostMapping地址为服务端提供的api接口地址

此处传进来的参数是一个POJO类,如果不使用@RequestBody注解 的话,feign远程调用时参数是无法被接收到的。

虽然获取数据时,大多数使用 Get请求方法,但是GET方法无法接收@RequestBody参数体。

所以只好改GET请求为POST请求。

调用接口http://localhost:9009/list/ad/allByQuery 传递json格式参数即可:

成功分页获取数据 自定义的返回类型数据:

接口定义:

服务消费方调用报错:

Method has too many Body parameters: public abstract com.xingren.common.data.JsonResult com.xingren.xxx.yyy.contract.api.controller.ISessionController.querySessions(com.xingren.xxx.yyy.contract.qo.SessionsQo,org.springframework.data.domain.Pageable)

通过搜索、调研,目前有三种解决方法:

1、将分页属性直接通过入参传递,接口定义如下:

2、将分页对象冗余在Qo中(通过继承实现):

3、通过注解传递(参考:Issue):

服务提供方定义注解:

服务提供方定义接口:

服务消费方定义processor:

服务消费方自定义PageableUtil:

定义PageableUtil原因:主要是因为Feign对QueryMap类型参数的序列化和反序列化的言七墨方式与Sort.Order的不兼容,导致排序失效。

服务消费方调用方式:

本文:Feign远程调用传递对象参数并返回自定义分页数据的方法的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Java中二叉树的基础概念是什么下一篇:

13 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18