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

server/2024/9/23 9:39:58/

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.ppmy.cn/server/48512.html

相关文章

C 语言实例 - 输出数组

使用 for 循环输出数组 #include <stdio.h>int main() {int array[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};int loop;for(loop 0; loop < 10; loop)printf("%d ", array[loop]);return 0; }输出结果为&#xff1a; 1 2 3 4 5 6 7 8 9 0使用 for 循环逆向输…

Jenkins 内置变量 和变量作用域

参考 ## 参考 https://www.cnblogs.com/weiweifeng/p/8295724.html 常用的内置变量 ## 内置环境变量地址 ${YOUR_JENKINS_HOST}/jenkins/env-vars.html## 内置环境变量列表 https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables 变量作用…

[Vue-常见错误]浏览器显示Uncaught runtime errors

文章目录 错误描述正确写法具体如下 错误描述 当前端代码发生错误时&#xff0c;浏览器中出现以下错误提示。 正确写法 显然这不是我们所期望的&#xff0c;在vue.config.js中配置如下设置关闭Uncaught runtime errors显示 devServer: {client: {overlay: false}具体如下 …

BL104钡铼多协议采集网关助力企业智能化转型

BL104钡铼多协议采集网关&#xff08;PLC物联网关BL104&#xff09;是为满足工业环境需求而设计的专业工业级协议转换网关。它在企业智能化转型过程中扮演着关键角色&#xff0c;为企业提供了高效、稳定的通信解决方案&#xff0c;助力企业实现智能化转型。 首先&#xff0c;P…

目标检测6:采用yolov8, RK3568推理的性能

最近有个小伙伴&#xff0c;问我rk3568上推理图片&#xff0c;1秒能达到多少&#xff1f; 本次采用模型为yolov8s.rknn&#xff0c;作了一次验证。 解析一段视频文件&#xff0c;1280*720, fps 24。读取视频文件&#xff0c;然后进行推理。 通过性能优化&#xff0c;发现推理…

UnityXR Interactable Toolkit如何实现Climb爬梯子

前言 在VR中,通常会有一些交互需要我们做爬梯子,爬墙的操作,之前用VRTK3时,里面是还有这个Demo的,最近看XRI,发现也除了一个爬的示例,今天我们就来讲解一下 如何在Unity中使用XR Interaction Toolkit实现爬行(Climb)操作 环境配置 步骤 1:设置XR环境 确保你的Uni…

家用洗地机怎么选?四大行业精品集合,识别度超高

家用洗地机&#xff0c;作为一种能够高效清洁地面的清洁工具&#xff0c;不仅减轻了人们家务的轻度&#xff0c;也给人们腾出了很多空闲的时间去享受生活。但是洗地机那么多&#xff0c;我们在面对洗地机选购的时候&#xff0c;我们应该要注意哪些呢&#xff1f;下面就为大家详…

用winform开发一个笔记本电脑是否在充电的小工具

笔记本充电状态有两种监测方式&#xff0c;一种是主动查询&#xff0c;另一种是注册充电状态变化事件 1&#xff0c;先说主动监控吧&#xff0c;建立一个线程&#xff0c;反复查询SystemInformation.PowerStatus.PowerLineStatus private void readPower(){while (true){this.…