当前位置: 首页 > news >正文

微服务中RestTemplate访问其他服务返回值转换问题

背景:

接收一个springcloud项目,UI模块访问其他服务的接口,返回数据统一都是使用fastjson进行转换,但是新开发了几个新模块之后发现fastjson很多bug(各种内存溢出),但是很多地方已经重度依赖fastjson,只是升级改掉了内存溢出的某些代码,最近突然想起来RestTemplate明明有定义返回值为啥不直接使用,因为我是为了统一规范,按照以前调用模块的写法进行开发,于是说试就试:

1. 调用接口(被调用接口我是统一返回json,也就是使用@RestController注解):

ReturnT responseEntity = restTemplate.postForObject("http://THPWPSERVICE/xx", 实体参数, ReturnT.class);

直接使用定义好的统一返回类型ReturnT进行接收返回值,然后访问页面无数据,后台报错如下:

databind.exc.MismatchedInputException: Cannot construct instance of................

网上各种查询,发现原因是要想接收指定类型,这个指定类型必须继承序列化,且还必须有有参构造函数以及午餐构造函数,于是添加@AllArgsConstructor 、@NoArgsConstructor注解再implements Serializable,完整统一返回类型的实体定义如下:

重启程序,再次访问终于拿到数据了

以下记录下一些RestTemplate调用注意事项:

1. 被调用接口如果形参是实体,那么就在实体之前加上注解@RequestBody,否则无法接收到参数

2. 被调用接口如果形参是基础类型参数(如String、int类型等等),那么就在类型前加上注解@RequestParam,否则无法接收到参数

3. 如果参数非实体类型,那么建议使用get请求   :

 String json = restTemplate.getForObject("http://XXXSERVICE/getById?id="+id, String.class);

以下是一些常用调用方法:

1. 带实体入参,使用post请求,layui表格返回值,直接返回json格式即可,无需解析return restTemplate.postForObject("http://THPWPSERVICE/supplies/getItems", form, String.class);  2. 参数少,使用get请求	,返回json实体,再转成实体类,再返回页面String json = restTemplate.getForObject("http://THPWPSERVICE/supplies/getByItemCode?itemCode="+itemCode, String.class);s = JSON.parseObject(json, new TypeReference<SuppliesItem>() {});3. 转list	ids = JSON.parseObject(json, new TypeReference<List>() { });4 .  BookDto bookDto = restTemplate.getForObject(url, BookDto.class);   -----待尝试5. ResponseEntity<BookDto> responseEntity = restTemplate.getForEntity(url, BookDto.class); -----待尝试//状态码System.out.println(responseEntity.getStatusCode());//获取头System.out.println("头:" + responseEntity.getHeaders());//获取bodyBookDto bookDto = responseEntity.getBody();6.  ResponseEntity<List<BookDto>> responseEntity =   -----待尝试restTemplate.exchange(url,HttpMethod.GET,null,new ParameterizedTypeReference<List<BookDto>>() {});List<BookDto> bookDtoList = responseEntity.getBody();7. BookDto result = restTemplate.postForObject(url, 参数, BookDto.class);

相关文章:

微服务中RestTemplate访问其他服务返回值转换问题

背景&#xff1a; 接收一个springcloud项目&#xff0c;UI模块访问其他服务的接口&#xff0c;返回数据统一都是使用fastjson进行转换&#xff0c;但是新开发了几个新模块之后发现fastjson很多bug&#xff08;各种内存溢出&#xff09;&#xff0c;但是很多地方已经重度依赖fa…...

Centos7.9上(离线)安装Gitlab

1、下载Gitlab的rpm安装包Index of /gitlab-ce/yum/el7/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 2、安装rpm -i gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm&#xff0c;如果依赖缺失&#xff0c;yum安装即可 3、vi /etc/gitlab/gitlab.rb 配置external_url&…...

pikachu中RCE出现乱码的解决的方案

exec “ping” 输入127.0.0.1 这种乱码的解决办法就是在pikachu/vul/rce/rce_ping.php目录里面的第18行代码 header("Content-type:text/html; charsetgbk");的注释打开即可。 BUT但是吧&#xff01;又出现了其他的乱码&#xff01;但是搞完这个再把它给注释掉就行了…...

airflow是什么

Airflow 简介 Airflow是一个基于有向无环图(DAG)的可编程、调度和监控的工作流平台&#xff0c;它可以定义一组有依赖的任务&#xff0c;按照依赖依次执行。airflow提供了丰富的命令行工具用于系统管控&#xff0c;而其web管理界面同样也可以方便的管控调度任务&#xff0c;并…...

训练用于序列分类任务的 RoBERTa 模型的适配器

介绍 NLP当前的趋势包括下载和微调具有数百万甚至数十亿参数的预训练模型。然而,存储和共享如此大的训练模型非常耗时、缓慢且昂贵。这些限制阻碍了 RoBERTa 模型开发更多用途和适应性更强的 NLP 技术,该模型可以从多个任务中学习并针对多个任务进行学习;在本文中,我们将重…...

Linux之awk判断和循环

echo zhaoy 70 72 74 76 74 72 >> score.txt echo wangl 70 81 84 82 90 88 >> score.txt echo qiane 60 62 64 66 65 62 >> score.txt echo sunw 80 83 84 85 84 85 >> score.txt echo lixi 96 80 90 95 89 87 >> score.txt把下边的内容写入到s…...

Django入门

Day1 django环境安装 创建虚拟环境 # step1 创建虚拟环境 python3 -m venv datawhale_django # step2 mac进入虚拟环境 source ./datawhale_django/bin/activate # step3 退出虚拟环境 deactivate安装包 pip3 install django ​pip3 install djangorestframework​​ pip3 …...

uniapp 格式化时间刚刚,几分钟前,几小时前,几天前…

效果如图&#xff1a; 根目录下新建utils文件夹&#xff0c;文件夹下新增js文件&#xff0c;文件内容&#xff1a; export const filters {dateTimeSub(data) {if (data undefined) {return;}// 传进来的data必须是日期格式&#xff0c;不能是时间戳//将字符串转换成时间格式…...

JProfiler —CPU评测

当JProfiler测量方法调用的执行时间及其调用堆栈时&#xff0c;我们称之为“CPU评测”。这些数据以多种方式呈现。根据你试图解决的问题&#xff0c;其中一个或另一个演示将是最有帮助的。默认情况下不会记录CPU数据&#xff0c;您必须打开CPU记录才能捕获有趣的用例。 一、调…...

994. 腐烂的橘子

994. 腐烂的橘子(面试题打卡/前缀和/简单) 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/rotting-oranges/ 题干&#xff1a; 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a;…...

Rx.NET in Action 第三章学习笔记

3 C#函数式编程思想 本章内容包括 将 C# 与函数式技术相结合使用委托和 lambda 表达式使用 LINQ 查询集合 面向对象编程为程序开发提供了巨大的生产力。它将复杂的系统分解为类&#xff0c;使项目更易于管理&#xff0c;而对象则是一个个孤岛&#xff0c;你可以集中精力分别处理…...

Windows11环境下VS2019调用Pytorch语义分割模型(C++版)

语义分割模型在训练时往往采用python脚本进行网络搭建和训练&#xff0c;并获得训练好的模型。为了提高效率方便整个工程项目部署&#xff0c;实际工程应用中通常希望使用C编程语言调用训练好的网络模型。查询大量网络资料并踩过无数坑后&#xff0c;经实际测试实现了在window1…...

Milkv Duo 以太网使用与配置

网络配置 使能网卡 使用ip link查看是否存在eth0网卡&#xff0c;若无使用如下命令使能网卡&#xff1a; ip link set eth0 up两次使用ip link确认网卡eth0已经使能。 配置IP、gws 本人设备连接到华为路由器下&#xff0c;故增加如下路由信息&#xff1a; ip route add d…...

bash: make: command not found

make之后报错信息如下&#xff1a;cd 对应的文件路径后 make 发现报错&#xff1a;bash: make: command not found 这个原因可能是没有安装make工具,也可能是安装了make之后,没有将make的文件路径添加到系统环境变量中 有没有安装make,可以使用Search Everything搜索是否有make…...

热点如何用于期刊写作——以chatGPT为例

交叉领域A&#xff0c;B 以自己为例子&#xff0c;A是教育 B是技术&#xff0c;我是教育技术学专业。 经验来源 知网关于GPT的140余篇专业论文的观察 截止至2023年8月14日15:35:45 学习每出现一个热点&#xff0c;如何应用于学术。 实践阅读发现 套路一&#xff1a;谈理论…...

IGV.js 的完全本地化运行探索

问题及解决方法 IGV.js 完全本地化是为了合规&#xff0c;不使用外网的情况下查看基因组。不联网需要下载 genomes.json 文件及其中的内容之外&#xff0c;还需要修改 igv.js本身&#xff0c;防止5s超时后才显示网页内容。修改的关键词是: genomes.json&#xff0c;改为本地的…...

网络安全渗透测试之靶场训练

NWES: 7月26号武汉地震检测中心遭受境外具有政府背景的黑客组织和不法分子的网络攻击。 目前网络攻击主要来自以下几种方式: DDOS&#xff1a;分布式拒绝服务攻击。通过制造大量无用的请求向目标服务器发起访问&#xff0c;使其因短时间内无法处理大量请求而陷入瘫痪。主要针对…...

Java课题笔记~ Spring 的事务管理

一、Spring 的事务管理 事务原本是数据库中的概念&#xff0c;在 Dao 层。但一般情况下&#xff0c;需要将事务提升到业务层&#xff0c;即 Service 层。这样做是为了能够使用事务的特性来管理具体的业务。 在 Spring 中通常可以通过以下两种方式来实现对事务的管理&#xff…...

仿到位|独立版家政上门预约服务小程序家政保洁师傅上门服务小程序上门服务在线派单源码

上门预约服务派单小程序家政 小程序 同城预约 开源代码 独立版. 程序完整,经过安装检测,可放心下载安装。 适合本地的一款上门预约服务小程序,功能丰富,适用多种场景。 程序功能:城市管理/小程序DIY/服务订单/师傅管理/会员卡功能/营销功能/文章功能等等...

Observability:识别生成式 AI 搜索体验中的慢速查询

作者&#xff1a;Philipp Kahr Elasticsearch Service 用户的重要注意事项&#xff1a;目前&#xff0c;本文中描述的 Kibana 设置更改仅限于 Cloud 控制台&#xff0c;如果没有我们支持团队的手动干预&#xff0c;则无法进行配置。 我们的工程团队正在努力消除对这些设置的限制…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...