spring cloude 使用fegin远程调用接口返回了linkedHashMap的问题_【springcloud-feign】springcloud项目通过fegin远程调用接口返回结果类-程序员宅基地

技术标签: spring boot  java  异常记录  

作者情况描述:
最近在使用微服务进行服务之间的调用,通过fegin client调用时出现的问题

  1. 接口服务方返回参数:
    接口层封装返回的对象 Result
    接口
    实现层返回的对象 DeviceVo
    接口实现层返回的对象
  2. 接口调用方放回值类型:Result
    在这里插入图片描述
    1. 调用后返回的对象:Result,注意此时的data对象为LinkedHashMap
      在这里插入图片描述
      并显示报错信息:
[java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.springboot.cloud.business.trade.service.entity.po.OrderDevice]

这里由原本返回的对象转换成了LinkedHashMap,具体原因是因为:
因为rpc远程调用在底层还是使用的HTTPClient,所以在传递参数的时候,必定要有个顺序,当你传递map的时候map里面的值也要有顺序,不然服务层在接的时候就出问题了,所以它才会从map转为linkedhashMap!spring 有一个类叫ModelMap,继承了linkedhashMap public class ModelMap extends LinkedHashMap ,所以一个接口返回的结果就可以直接用ModelMap来接,注意ModelMap是没有泛型的,不管你返回的结果是什么类型的map,泛型是多复杂的map,都可以直接new一个Modelmap,用它来接返回的结果!!!

  • 所以在修改的时候需要在调用方用fegin 调用的时候加上返回对象泛型就能解决此问题了

  • 解决如下:
    在这里插入图片描述
    在这里插入图片描述
    这里返回的直接是该泛型对象转换后的值,完美解决!不过特别注意的是:

    注意:如果存在时间为DATE类型的字段的时候,调用方需要使用String来接收该时间字段
    如果你的时间存在时差问题。那是因为:
    Feign客户端在进行通信时,会将Date类型对象转为String类型,如果这个时间是北京时间2019年2月19日20点30分,因为中国的时区叫做CTS,所以转化后的String为“Tue Feb 19 20:30:00 CST 2019”. 服务端将接收的String类型日期转换为Date类型,转换采用的是Date的默认构造器new Date(‘Tue Feb 19 20:30:00 CST 2019’),这里就是错误发生的时刻,因为CTS代表的时区其实有四个(Central Standard Time (USA) UT-6:00、Central Standard Time (Australia) UT+9:30、China Standard Time UT+8:00、Cuba Standard Time UT-4:00),同时表示美国,澳大利亚,中国,古巴四个国家的标准时间。根据JavaDoc,jvm会将CTS理解成了美国中部时区,因此造成了时区错误。
    解决方法:

  • 使用String类型作为参数,

  • 在接收方进行类型转换 使用JDK8中的LocalDate

  • 第三种方法增加配置类,使Feign使用自定义的规则转换


so,是不是该反手就要点个赞呢 --》嘿哈哈哈–》

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Mou_O/article/details/105225924

智能推荐

设计模式(六):原型模式

原型模式的介绍

达梦数据库屏蔽系统保留字的方法_exclude_reserved_words-程序员宅基地

文章浏览阅读2k次。前言​ 当在达梦数据库中创建表等对象时,对象名称使用一些单词时可能会遇到创建失败报错“语法分析错误”,这种情况有可能是遇到了使用的对象名为系统保留字的无法使用。针对这种情况,一般建议修改对象名为系统保留字之外的名称。如果是现有的系统上,一定要使用系统保留字,那么对于部分系统保留字(非所有)可以通过参数屏蔽的方式来处理。​ 达梦数据库中排除屏蔽系统保留字的方法有两种:​ 第一种:修改数据库dm.ini中参数EXCLUDE_RESERVED_WOR_exclude_reserved_words

ansible提示 python 报错的问题及解决

ansible python报错的解决方法

Java - JDK8 下载 & 安装教程(Mac M芯片)_mac idea下载jdk8-程序员宅基地

文章浏览阅读855次,点赞12次,收藏5次。Java - JDK8 下载 & 安装教程(Mac M芯片)_mac idea下载jdk8

BIGEMAP 中ArcGIS教程之DEM(高程)的应用(坡度坡向、提等高线)_bigemapper生成等高线与实际高程不一致-程序员宅基地

文章浏览阅读384次,点赞2次,收藏2次。相关教程:DEM水文分析(一)Arcgis下DEM水文分析(二) DEM的应用包括:坡度:Slope、坡向:Aspect、提取等高线、算地形表面的阴影图、可视性分析、地形剖面、水文分析等,其中涉及的知识点有: a)掌握根据DEM 计算坡度、坡向的方法。 b)理解基于DEM数据进行水文分析的基本原理。 c)利用ArcGIS的提供的水文分析工具进行..._bigemapper生成等高线与实际高程不一致

java+redis+lua生成自动增长的ID序列号-程序员宅基地

文章浏览阅读629次。1.编写lua脚本用于生成主键ID序列号,内容如下local key = tostring(KEYS[1]);local count = tonumber(KEYS[2]);local dateStr = tostring(KEYS[3]);local newKey = key .. "_" .. dateStr;local numRedis = redis.call("incr", ..._lua实现redis自增id

随便推点

力扣(leetcode) 407. 接雨水 II 3D接雨水

图中,蓝色的围栏中,高度为4的柱子为最短的。的思路,二维的情况下,我们用双指针的方法不断的缩小未被扫描到的范围,也就是被我们(用指针)划定的边界框起来的范围。利用最短围栏确定其领域接水高度的规则,我们可以依次确定红色区域的接水高度,然后将其加入到围栏当中,一直缩小围栏,就可以得到所有柱子的接水高度。的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。”,这里也是这样,我们找到最短的那个围栏(柱子),它必然可以确定与它相邻的柱子的接水量。因为我们可以发现,最。

谷歌Gemini刚发就惹质疑:测试标准有失偏颇,效果视频疑似剪辑-程序员宅基地

文章浏览阅读912次,点赞25次,收藏23次。Gemini还有一大卖点是多模态能力,针对开头画小鸭子的视频,我们从中抽取了8个关键帧,分别进行提问,看看Gemini的表现有没有那么神奇。而勉强解说了的8个(实际上是6个,因为有两个是重复的)图,只有左下和右下两张图是对的,至于middle指的到底是哪一行,我们不得而知……针对图7的成品,Gemini直接说没毛病,该有的东西都有,背景也很真实,甚至没忘继续提根本不知道哪里来的芦苇。针对图6,Gemini给出的回答不能说十分精准,只能说是驴唇不对马嘴,还配上了一张风马牛不相及的图片。

石油大学计算机网络课程设计(在线考试答案)_望每个部门可以独立管理自己的网络资源,同时需要保证所有部门之间可以有效地共享-程序员宅基地

文章浏览阅读1.8w次,点赞5次,收藏66次。中国石油大学(北京)远程教育学院《计算机网络课程设计》大作业说明1. 目的:本大作业的目的是希望同学们学以致用,能够将课程上教授的理论内容在自己的工作生活实践中加以印证,理解计算机网络设计的基本内容即可。2. 方法:同学们可以结合自己的工作生活实际情况,观察所在单位(或家庭、网吧等有网络规划的地方)的网络设计情况。具体内容有:1.要搞清楚所观察对象(单位、家庭或网吧等)的网络能够实现什..._望每个部门可以独立管理自己的网络资源,同时需要保证所有部门之间可以有效地共享

MovieLens_movielens数据集-程序员宅基地

文章浏览阅读2.6k次。使用文本卷积神经网络,并使用MovieLens数据集完成电影推荐的任务。https://grouplens.org/datasets/movielens/https://zhuanlan.zhihu.com/p/32078473https://blog.csdn.net/yfren1123/article/details/79194064GroupLens Research已从MovieLens网站(http://movielens.org)收集并提供了评级数据集。根据数据集的大小,在不同的时间_movielens数据集

ArcGIS如何把多个tif影像合成一个tif影像_arcgis的多个tif图合并出错-程序员宅基地

文章浏览阅读6.9w次,点赞54次,收藏298次。ArcGIS如何把多个tif影像合成一个tif影像0、如图我要把图中4个影像和成一个tif影像。接下来就是如何合成了,这里我们采用镶嵌的功能。镶嵌: 是指两个或多个图像的组合或合并。在 ArcGIS 中,您可以通过将多个栅格数据集镶嵌到一起来创建一个单个栅格数据集。此外,还可以通过一系列栅格数据集创建镶嵌数据集和虚拟镶嵌。1、我们选择Arctoolbox——数据管理工具——栅格——栅格数据集——镶嵌至新栅格2、点击镶嵌至新栅格3、点击输入栅格,把要合成的栅格输入进去,这里输入了我要合成的_arcgis的多个tif图合并出错

jsp el 表达式_JSP表达式语言– JSP EL示例教程-程序员宅基地

文章浏览阅读354次。jsp el 表达式Today we will look into JSP Expression Language or JSP EL Example tutorial. 今天,我们将研究JSP表达式语言或JSP EL示例教程。 JSP表达式语言– JSP EL (JSP Expression Language – JSP EL)Most of the times we use JSP f..._jsp el 教程

推荐文章

热门文章

相关标签