项目使用spring cloud后,各种服务被独立开,功能被分开。因此,会开发中我们往往会遇到一些问题,服务间的互相调用需要更为复杂的方式。

调用方式主要有两种

一种是http请求方式,结合常说的restful风格,来传递信息,基于tcp的短暂通讯方式(伪RPC)。

另一种就是基于socket的长连接,底层同样基于tcp的RPC方式调用。

这两种方式,可能RPC效率更高,因为他不用也不需要像http协议那样重复建立连接和释放连接的过程,但是它也有缺点,长期占用连接资源,在没有调用时依然建立连接。而现在应用最广泛的就是第一种方式,而应用主要就是FeignClient。废话不多说。

FeignClient在服务间相互调用时,会出现需要传递复杂对象的情况(对象中包含其他对象,又包含数组等),这时,返回值会无法直接解析,而是被java默认转换成了linkedHashMap,这种复杂对象为了安全起见,自动转换成了一种map是很正常的,但是这并不方便我们的使用。而我们想直接传递原对象最好的方式就是带上---泛型。

见代码:


import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;/*** @ClassName ReturnData* @Description 返回数据实体* @Author TY* @Date 09:55$ 2019-03-18$* @Version 1.0**/
public class ReturnResult<T> {private int retCode;/*** 对retCode的说明*/private String retMsg;/*** 返回数据,单个数据可以直接放入,多个数据建议使用map或其他实体类*/private Object retData;/*** 存放数据对象*/@JsonInclude(Include.NON_NULL)private T t;public ReturnResult() {}public ReturnResult(int retCode, String retMsg, Object retData) {this.retCode = retCode;this.retMsg = retMsg;this.retData = retData;}public int getRetCode() {return retCode;}public void setRetCode(int retCode) {this.retCode = retCode;}public String getRetMsg() {return retMsg;}public void setRetMsg(String retMsg) {this.retMsg = retMsg;}public Object getRetData() {return retData;}public void setRetData(Object retData) {this.retData = retData;}/*** 获取数据对象** @return T*/public T getT() {return t;}/*** 设置数据对象** @param t t*/public void setT(T t) {this.t = t;}
}

这里的代码仅仅是为了demo,让大家更好的理解,使用的时候可以加以略微调整。

spring cloud 复杂类型 FeignClient 避免linkedHashMap相关推荐

  1. Spring Cloud 中的@FeignClient注解

    @FeignClient:属于Spring Cloud技术架构体系中的一个注解,其作用是可以让当前服务调用其它应用服务的接口,相比于RestTemplate使用起来更加灵活. 在使用@FeignCli ...

  2. Spring Cloud 中的@FeignClient注解中的contextId属性

    在使用@FeignClient注解前,我们需要先引入其相关依赖,版本为3.0.1 <dependency><groupId>org.springframework.cloud& ...

  3. Spring Cloud Netflix中文文档翻译笔记

    原文地址:http://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/1.2.2.RELEASE/ Spring Cloud Net ...

  4. 异常解决——Spring Cloud FeignClient: BeanCreationException: Error creating bean with

    最近自己搭建了Spring Cloud 架构,在做客户端的时候,FeignClient标注的Service接口 无法注入,can not be autowired . 网上找了一堆资料也没发现可用的. ...

  5. Spring Cloud —— RocketMQ 的消息类型

    导航 引言 一.普通消息 1.1 可靠同步发送 1.2 可靠异步发送 1.3 单向发送 二.顺序消息 三.事务消息 3.1 什么是事务消息 3.2 事务消息示例 1.编写本地事务逻辑 2.发送半事务消 ...

  6. Spring cloud实现FeignClient指定Zone调用

    本文基于Spring Cloud Fincheley SR3 背景介绍 目前项目多个区域多个集群,这些集群共用同一个Eureka集群.通过设置eureka.instance.metadata-map. ...

  7. 【方向盘】Spring Cloud 2021.0.0正式发布,FeignClient调用结果可一键缓存

    盛年不重来,一日难再晨. 本文已被https://yourbatman.cn收录:女娲Knife-Initializr工程可公开访问啦:程序员专用网盘https://wangpan.yourbatma ...

  8. @FeignClient使用详解 name, url,decode404, value,fallbackFactory等。spring cloud 远程接口实现全流程。

    @FeignClient标签的常用属性如下: name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现 value:指定FeignClien ...

  9. Spring Cloud Feign使用详解

     通过前面两章对Spring Cloud Ribbon和Spring Cloud Hystrix的介绍,我们已经掌握了开发微服务应用时,两个重要武器,学会了如何在微服务架构中实现客户端负载均衡的服务调 ...

最新文章

  1. android 网络加载图片点击大图后 浏览 可 缩放,Android 网络加载图片点击大图后 浏览 可 缩放...
  2. LeetCode Longest Increasing Subsequence(动态规划、二分法)
  3. oracle的39082,ORA-39082 导入数据遇到的问题
  4. getBoundingClientRect的用法
  5. 前端 chrome查看html样式基本操作
  6. word List 05
  7. Leetcode--279. 完全平方数
  8. ThinkPHP6项目基操(2.Nginx配置虚拟域名及简化访问路径)
  9. 算法导论第八章__实现计数排序
  10. Tarjan算法查找强联通组件的程序
  11. 阿里云MaxCompute中pyODPS的使用:多线程上传、下载、分区
  12. 如何让gitbook与github仓库关联
  13. Android:应用宝省流量更新
  14. android关于16进制转字符串的问题
  15. premiere pro 2020 pr 快捷键
  16. 1月份中国综合PMI指数为53.2% 企业生产经营活动总体增速加快
  17. xp系统蓝屏代码7b_电脑开机蓝屏错误代码0x0000007B的详细解决过程
  18. stm8s001 - SWIM复用为ADC输入 ADC电压值不准确?
  19. 数据挖掘——了解数据
  20. SF超高速FTP搜索引擎(哈尔滨工业大学)

热门文章

  1. DevOps企业实践指南(1):DevOps能为我们带来什么
  2. shell教程(2):积木游戏之认识积木--重要的系统命令
  3. JS 实现网页截屏五种方法
  4. 后门准则(Backdoor Criterion)与前门准则(Frontdoor Criterion)
  5. 一个快速搭建微商城的方法
  6. background图片叠加_css在图片上叠加层(其他图标)
  7. iOS13 iPadOS 获取UserAgent的问题
  8. 不要迷恋哥,哥不只是传说(再【转】世界上最牛的程序员)
  9. 服务器Ping值代表着什么?
  10. Jmeter打开badboy录制的脚本报类元素错误解决方法