springboot中基于RestTemplate 类 实现调用第三方API接口,获取响应体内容不需要转换数据类型【丰富版】

RestTemplate 用法 和 http工具类 这篇就不说了 可以去看下面的博客
本篇文章是 针对 下面的博客 进行的扩展

https://blog.csdn.net/Drug_/article/details/137166797
我们在调用第三方 api接口 时候

在获取相应体的时候 不知道用什么数据类型 去接 响应体里的数据
用 字符串 用 fastjson里的 JSONObject 或者 用 java对象 好像都不方便
如果接到 数据 不是我们想要的对象 我们还需要 来回转换 很烦

比如 用 字符串 接 json字符串
接到后 再 用 fastjson转换成我们想要的 java对象

又比如 用 fastjson里的 JSONObject 对象接 接后 我们要么 get(“aaa”) 去取数据
要么 拿到这个对象 还要再 转换成 java对象

所以有没有 一种方案 指定响应体里的 数据类型 取到 直接是我们想要的

下面 是利用泛型 可以灵活 配置 响应体 接的类型 增强版

之前的 老写法 从上篇博客里复制过来 进行对比的

  /*** 调用第三方服务器接口  get** @param url         路由* @param httpHeaders 请求头* @return 返回相应所有参数*/public static ResponseEntity<String> doGet(String url, HttpHeaders httpHeaders) throws Exception {RestTemplate restTemplate = new RestTemplate(RestTemplateConfig.generateHttpRequestFactory());//此处加编码格式转换restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));// 设置请求头httpHeaders.setContentType(MediaType.APPLICATION_JSON);HttpEntity httpEntity = new HttpEntity(httpHeaders);// 发送 GET 请求return restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class);}
这种 获取到 响应体 用String  来接数据 接到数据后 还要来回转换 数据类型 

下面的是 扩展后的写法

目前只扩展了 doGet 方法 post 大家有兴趣 根据 doGet的写法 可以 也扩展一下
这样就不用 获取到 第三方的 json数据 来回转换了 直接用

   /*** 调用第三方服务器接口  get** @param url         路由* @param httpHeaders 请求头* @param responseType 响应类型* @return 返回相应所有参数*/public static <T> ResponseEntity<T> doGet(String url, HttpHeaders httpHeaders, ParameterizedTypeReference<T> responseType) throws Exception {RestTemplate restTemplate = new RestTemplate(RestTemplateConfig.generateHttpRequestFactory());//此处加编码格式转换restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));// 设置请求头httpHeaders.setContentType(MediaType.APPLICATION_JSON);HttpEntity httpEntity = new HttpEntity(httpHeaders);// 发送 GET 请求return restTemplate.exchange(url, HttpMethod.GET, httpEntity, responseType);}public static <T> T doGet(String url,ParameterizedTypeReference<T> responseType) throws Exception {return doGet(url,new HttpHeaders(),responseType).getBody();}

调用 例子:

@Data
public class ParkResponse<T>  {Boolean success;String errMsg;T data;
}

这样 返回值 就直接是我们想要的对象 不用来回转换了

    ParkResponse<List<ParkRegionSet>> parkResponse = HttpUtil.doGet(url,new ParameterizedTypeReference<ParkResponse<List<ParkRegionSet>>>(){});if (success.equals(parkResponse.getSuccess())) {List<ParkRegionSet> data = parkResponse.getData();if(ObjectUtils.isEmpty(data)){return new ArrayList<>();}return data;}

解释:

new ParameterizedTypeReference<ParkResponse<List<ParkRegionSet>>>(){}ParkResponse<List<ParkRegionSet>>  
//这个就是 指定 响应体的数据类型 用泛型  这样我们传入什么  就用什么接 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/25688.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库期末设计——图书管理系统

目录 1.前置软件以及开发环境&#xff1a; 2.开发过程讲解 代码环节&#xff1a; 数据库代码 1.BookDao.java 2.BookTypeDao.java 3.UserDao.java 4.Book.java 5.BookType.java 6.User.java 7.DbUtil.java 8.Stringutil.java 9.BookAddInterFrm.java 10.BookMan…

前端学习----css基础语法

CSS概述 CAscading Style Sheets(级联样式表) CSS是一种样式语言,用于对HTML文档控制外观,自定义布局等,例如字体,颜色,边距等 可将页面的内容与表现形式分离,页面内容存放在HTML文档中,而用于定义表现形式的CSS在一个.css文件中或HTML文档的某一部分 HTML与CSS的关系 HTM…

freertos中的链表1 - 链表的数据结构

1.概述 freertos中链表的实现在 list.c 和 list.h。旨在通过学习freertos中的链表的数据结构&#xff0c;对freertos中的链表实现有一个整体的认识。freertos使用了三个数据结构来描述链表&#xff0c;分别是&#xff1a;List_t&#xff0c; MiniListItem_t&#xff0c;ListIt…

智能合约中时间依赖漏洞

时间依赖漏洞 时间依赖漏洞是智能合约中一个常见的安全问题&#xff0c;特别是在以太坊等区块链环境中。这是因为区块链的区块时间戳可以被矿工在一定程度上操纵&#xff0c;这使得依赖于时间戳的智能合约容易受到攻击。攻击者可以通过控制区块时间戳来触发合约中的某些条件&a…

B3637 最长上升子序列

最长上升子序列 题目描述 这是一个简单的动规板子题。 给出一个由 n ( n ≤ 5000 ) n(n\le 5000) n(n≤5000) 个不超过 1 0 6 10^6 106 的正整数组成的序列。请输出这个序列的最长上升子序列的长度。 最长上升子序列是指&#xff0c;从原序列中按顺序取出一些数字排在一起…

产品创新:驱动企业增长的核心动力

在当今快速变化的市场环境中&#xff0c;产品创新已成为企业生存和发展的关键。产品创新不仅涉及全新产品或服务的开发&#xff0c;也包括对现有产品或服务的持续改进和优化。本文将深入探讨产品创新的定义、重要性以及如何通过创新驱动企业增长&#xff0c;并结合实际案例进行…

Java核心: JarIndex的使用

在讲解Java类加载器的时候&#xff0c;我们发现URLClassLoader加载类或资源时通过访问ClassPath下的每一个路径&#xff0c;来确定类是否存在的&#xff0c;假设我们执行的命令是这样的 java -classpath D:\DiveInSpring\target\classes;C:\lib\spring-expression.jar;C:\lib\…

力扣第196题“删除重复的电子邮件

关注微信公众号 数据分析螺丝钉 免费领取价值万元的python/java/商业分析/数据结构与算法学习资料 在本篇文章中&#xff0c;我们将详细解读力扣第196题“删除重复的电子邮件”。通过学习本篇文章&#xff0c;读者将掌握如何使用SQL语句来解决这一问题&#xff0c;并了解相关的…

前端下载图片的几种方式

1.后端返回文件流&#xff0c;前端利用Blob解析文件流下载 2.下载资源必须是与页面地址同源时&#xff0c;直接利用a标签下载 注意点&#xff1a;下载资源必须与页面地址同源 3.利用fetch或者xhr从图片地址获取二进制数据&#xff08;blob&#xff09;进行下载 代码如下&am…

Robust Tiny Object Detection in Aerial Images amidst Label Noise

文章目录 AbstractIntroductionRelated WorkMethodsClass-aware Label CorrectionUpdateFilteringTrend-guided Learning StrategyTrend-guided Label ReweightingRecurrent Box RegenerationExperimentpaper Abstract 精确检测遥感图像中的小目标非常困难,因为这类目标视觉信…

Facebook开户|Facebook广告设计与测试优化

早上好家人们~今天Zoey给大家伙带来的是Facebook广告设计与测试优化&#xff0c;需要的家人们看过来啦&#xff01; 一、避免复杂用图和过多的文字 根据Facebook的数据显示&#xff0c;用户平均浏览一个贴文的时间在手机上仅花1.7秒、在电脑上则为2.5秒。因此&#xff0c;广告…

【Linux】进程7——进程地址空间

1.再谈fork 之前提到了fork之后对父子进程返回不同的id值&#xff0c;给父进程返回子进程的pid&#xff0c;给子进程返回0&#xff0c;所以对于一个id如何存储两个值的说法&#xff0c;在我们之前已经提到过了一个概念叫做写时拷贝&#xff0c;就是在子进程要想修改父进程的id…

首途第三十三套清新简约卡片风格蓝紫渐变色短视频模板 | 苹果CMSV10主题

首途第三十三套清新简约卡片风格蓝紫渐变色短视频模板 | 苹果CMSV10主题 我们的简约风格&#xff0c;以纯洁的白色和深邃的紫色为主色调&#xff0c;为您提供了一种清新、时尚的浏览体验。在这个简洁而美丽的界面中&#xff0c;您可以轻松畅享各种精彩短视频。我们专注于简单的…

C++命名空间的定义、C++命名空间的使用、C++输入输出等的介绍

文章目录 前言一、C命名空间的定义1. C命名空间产生的原因2. 作用域限定符3. C变量的访问顺序 二、C命名空间的使用1. 加命名空间名称及作用域限定符2. 使用using将命名空间中某个成员引入3. 使用using namespace 命名空间名称 引入4. 嵌套命名空间使用 三、 C输入&输出总结…

向AI请教如何说不

面对父母的催婚&#xff0c;你可以采取以下几个步骤来进行沟通和表达自己的立场&#xff1a; 理解与尊重&#xff1a;首先&#xff0c;要理解父母催婚背后的关心和期望。他们可能出于对你未来幸福和生活稳定的考虑。表达对他们关心的感激&#xff0c;这有助于建立良好的沟通基础…

超详解——python条件和循环——小白篇

目录 1. 缩进和悬挂else 2. 条件表达式 3. 和循环搭配的else 4. 可调用对象 总结&#xff1a; 1. 缩进和悬挂else 在Python中&#xff0c;代码块是通过缩进来表示的。条件判断和循环结构的代码块需要正确缩进。悬挂else指的是else子句和相应的if或循环在同一级别的缩进。 …

⌈ 传知代码 ⌋ 基于曲率的图重新布线

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

扩散模型Stable Diffusion

扩散模型构成 Text Encoder(CLIPText) Clip Text为文本编码器。以77 token为输入&#xff0c;输出为77 token 嵌入向量&#xff0c;每个向量有768维度。 Diffusion(UNetScheduler) 在潜在空间中逐步处理扩散信息。以文本嵌入向量和由噪声组成的起始多维数组为输入&#xff0c…

1909java内部知识管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java内部知识管理系统是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助采用了java设计&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统采用web模式&#xff0c;系统主要采用B/S模式开发。开 发环境为TOMCAT7.0,Myeclipse8.5开发&…

近邻算法的详细介绍

近邻算法&#xff08;Nearest Neighbor Algorithm&#xff09;&#xff0c;通常称为 k-近邻算法&#xff08;k-Nearest Neighbors&#xff0c;简称 k-NN&#xff09;&#xff0c;是一种基本的分类和回归方法。它的工作原理非常直观&#xff1a;通过测量不同特征值之间的距离来进…