12.SpringBoot之RestTemplate的使用

news2024/11/24 4:20:53

SpringBoot之RestTemplate的使用

初识RestTemplate

  • RestTemplate是Spring框架提供用于调用Rest接口的一个应用,它简化了与http服务通信方式。RestTemplate统一Restfull调用的标准,封装HTTP链接,只要需提供URL及返回值类型即可完成调用。相比传统的HttpClient与Okhttp,
    RestTemplate是一种优雅,简洁调用RESTfull服务的方式。

  • RestTemplate默认依赖JDK提供Http连接的能力(HttpURLConnection),如果有需要的话也可以通过SetRequestFactory方法替换为如:Apache
    HttpComponents、Netty或OKHttp等其他HTTP库。

本项目中所需数据获取平台:Tushare股票数据获取平台

tushare数据接口讲解

获取自己的token(令牌),是访问数据的关键
01
如何获取数据:
02

03
04

- 实时访问:需要积分的至少120起
 需要通过RestTemplate接口发送和接收信息。

- 历史数据访问:不需要积分。
 直接下载成csv文件

05
下载好的csv文件信息
06

实时数据访问

获取数据字符串

导入RestTemplate工具

  • 在Demo20230830Application中向spring注册RestTemplate工具
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@SpringBootApplication
@EnableSwagger2
public class Demo20230830Application {

   public static void main(String[] args) {
       SpringApplication.run(Demo20230830Application.class, args);
   }

   /**
    * 向spring注册RestTemplate工具
    * @return
    */
   @Bean
   public RestTemplate getRestTemplate(){
       return new RestTemplate();
   }
}

  • 使用RestTemplate工具向tushare网站接口发送请求,从其接口中接收响应信息。
  • 在controller包下创建MyController2,在MyController2中输入
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/my2")
public class MyController2 {
   //将RestTemplate工具导入到当前控制器中
   @Autowired
   RestTemplate restTemplate;

   @RequestMapping("/r1")
   public void r1(){
       //1、封装map参数
       HashMap<String, String> map = new HashMap<>();
       map.put("api_name","stock_company");
       map.put("token","你自己的token");
       //2、设置请求头信息
       HttpHeaders httpHeaders = new HttpHeaders();
       httpHeaders.setContentType(MediaType.APPLICATION_JSON);
       //3、封装头实体内容
       HttpEntity<Map> entity = new HttpEntity<>(map, httpHeaders);
       //4、传递信息
       String str = restTemplate.postForObject("http://api.tushare.pro", entity, String.class);
       System.out.println(str);
   }
@RequestMapping("/r2")
public void r2(){
   //1、封装map参数
   HashMap<String, String> map = new HashMap<>();
   map.put("api_name","stock_basic");
   map.put("token","你自己的token");
   //2、设置请求头信息
   HttpHeaders httpHeaders = new HttpHeaders();
   httpHeaders.setContentType(MediaType.APPLICATION_JSON);
   //3、封装头实体内容
   HttpEntity<Map> entity = new HttpEntity<>(map, httpHeaders);
   //4、传递信息
   String str = restTemplate.postForObject("http://api.tushare.pro", entity, String.class);
   System.out.println(str);
}

}

Fastjson转为json

从tushare获取到的数据 复杂的json格式数据,如果我们自己进行String的数据解析,消耗大量时间。
程序员会使用JSON工具,将字符串转为json,或将json转为其他数据类型。
  • 引入fastjson
    在pom.xml文件中引入,引入之后记得更新maven,不然不会生效
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>fastjson</artifactId>
   <version>1.2.17</version>
</dependency>

07

  • 使用fastjson
/**
* fastjson的转换展示
*/
@RequestMapping("/r3")
public void r3(){
   //1、封装map参数
   HashMap<String, String> map = new HashMap<>();
   map.put("api_name","stock_basic");
   map.put("token","你自己的token");
   //2、设置请求头信息
   HttpHeaders httpHeaders = new HttpHeaders();
   httpHeaders.setContentType(MediaType.APPLICATION_JSON);
   //3、封装头实体内容
   HttpEntity<Map> entity = new HttpEntity<>(map, httpHeaders);
   //4、传递信息
   String str = restTemplate.postForObject("http://api.tushare.pro", entity, String.class);
   //5、JSON转换
   JSONObject jsonObject = JSONObject.parseObject(str);
   //获取请求id(测试用)
   String requestId = jsonObject.getString("request_id");
   //获取本次的所有数据
   JSONObject data = jsonObject.getJSONObject("data");
   //获取表头(数组)
   JSONArray fields = data.getJSONArray("fields");
   //fields.fori
   for (int i = 0; i < fields.size(); i++) {
       System.out.print(fields.get(i)+"\t\t");
   }
   System.out.println();
   //获取表格内部数据
   JSONArray items = data.getJSONArray("items");
   for (int i = 0; i < items.size(); i++) {
       JSONArray jsonArray = items.getJSONArray(i);
       //展示这一行的数据
       for (int j = 0; j < jsonArray.size(); j++) {
           System.out.print(jsonArray.get(j)+"\t\t");
       }
       System.out.println();
   }
}

小结:
获取的是{"k1":"v1","k2":"v2"} json格式,获取其中k2的值,v2
JSONObject


获取的是["a1","a2","a3"] json格式,获取其中a2
JSONArray

历史数据访问

导出csv文件

在Tushare数据平台导出csv文件
08

OpenCSV

完成Java程序和CSV之间的互通。

  • 导入OpenCSV环境:
<dependency>
   <groupId>com.opencsv</groupId>
   <artifactId>opencsv</artifactId>
   <version>5.7.1</version>
</dependency>

08

  • 使用OpenCSV进行解析
    在resources下新建csvdata包—在csvdata包下新建文件 stock_basic,把.txt后缀改为.csv
    09
    以下两种方式均可进行解析
/**
* openCSV
*/
@RequestMapping("/r4")
public void r4(){
   try(
           FileReader reader = new FileReader("D:\\\\project\\yanan_20230828\\demo_20230830\\src\\main\\resources\\csvdata\\stock_basic.csv"); //这里是刚新建stock_basic.csv文件的地址
           ) {
       CSVReader csvReader = new CSVReader(reader);
       List<String[]> list = csvReader.readAll();
       for (String[] arr : list) {
           //展示某一行的数据
           for (String s : arr) {
               System.out.print(s+"\t\t");
           }
           System.out.println();
       }
   } catch (FileNotFoundException e) {
       throw new RuntimeException(e);
   } catch (IOException e) {
       throw new RuntimeException(e);
   } catch (CsvException e) {
       throw new RuntimeException(e);
   }
}

/**
* openCSV
*/
@RequestMapping("/r5")
public void r5() {
   File file;
   try {
       file = ResourceUtils.getFile("classpath:csvdata/stock_basic.csv");
   } catch (FileNotFoundException e) {
       throw new RuntimeException(e);
   }
   try (
           FileReader reader = new FileReader(file);
   ) {
       CSVReader csvReader = new CSVReader(reader);
       List<String[]> list = csvReader.readAll();
       for (String[] arr : list) {
           //展示某一行的数据
           for (String s : arr) {
               System.out.print(s + "\t\t");
           }
           System.out.println();
       }
   } catch (FileNotFoundException e) {
       throw new RuntimeException(e);
   } catch (IOException e) {
       throw new RuntimeException(e);
   } catch (CsvException e) {
       throw new RuntimeException(e);
   }
}

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

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

相关文章

小程序之基础入门(1)

⭐⭐ 小程序专栏&#xff1a;小程序开发专栏 ⭐⭐ 个人主页&#xff1a;个人主页 目录 一.前言 二.小程序简介 2.1 微信小程序的特点和优势&#xff1a; 三.小程序的安装与使用 五.小程序入门案例及目录结构 好啦&#xff01;&#xff01;今天的分享就到这啦&#xff01;…

多测师肖sir_高级金牌讲师_python之模块008

python之模块 一、模块的介绍 &#xff08;1&#xff09;python模块&#xff0c;是一个python文件&#xff0c;以一个.py文件&#xff0c;包含了python对象定义和pyhton语句 &#xff08;2&#xff09;python对象定义和python语句 &#xff08;3&#xff09;模块让你能够有逻辑…

微信浏览器大字体模式 按钮文字居中用line-height 显示异常

按钮文字居中用line-height 的css 在微信浏览器大字体模式&#xff0c;会导致显示错误。改成flex 居中就好了

R语言手动绘制NHANSE数据基线表并聊聊NHANSE数据制作亚组交互效应表的问题(P for interaction)

美国国家健康与营养调查&#xff08; NHANES, National Health and Nutrition Examination Survey&#xff09;是一项基于人群的横断面调查&#xff0c;旨在收集有关美国家庭人口健康和营养的信息。 地址为&#xff1a;https://wwwn.cdc.gov/nchs/nhanes/Default.aspx 在既往的…

精品Python基于django就业数据分析平台求职招聘应聘-爬虫可视化大屏

《[含文档PPT源码等]精品基于django就业数据分析平台-爬虫》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前端技术&#xff1a;JavaS…

常见锁的分类

入职体验&#xff1a; 今天运维岗位刚入职&#xff0c;但是目前还没有办理入职手续&#xff0c;但是领导发了一堆资料&#xff01;看了一下&#xff0c;非常多的新东西&#xff0c;只能说努力一把&#xff01;&#xff01;&#xff01; 一、锁的分类 1.1 可重入锁、不可重入锁…

DAE转换GLB格式

1、DAE模型介绍 DAEA&#xff08;Deep Attentive and Ensemble Autoencoder&#xff09;模型是一种用于无监督学习的深度学习模型&#xff0c;由华为公司提出。DAEA模型结合了自编码器和深度注意力机制&#xff0c;能够对高维数据进行降维和特征提取&#xff0c;并且在处理大规…

求三维坐标绕坐标轴旋转后的坐标值

目的 旋转矩阵 应用 沿单个坐标轴旋转 沿多个坐标系旋转 目的 由于其他文章原理介绍比较详细&#xff0c;但应用方面较少。本文直接介绍旋转矩阵的应用&#xff0c;条件为坐标系不变&#xff0c;求旋转后的三维坐标。本文方法较傻瓜式&#xff0c;需要自己进行测试以确认是…

Java-使用sqlSessionTemplate实现批量更新-模拟mybatis 动态sql

环境准备&#xff08;非核心方法&#xff09; 创建表 创建表的sql(下表是基于Oracle创建的) CREATE TABLE "SYSTEM"."STUDENT" ("ID" NUMBER(10, 0),"NAME" VARCHAR2(20 BYTE),"ADDRES" CLOB,PRIMARY KEY ( …

Studio One6.5全新版本更新功能详情介绍

Studio One是一款专业的音乐制作软件&#xff0c;由美国PreSonus公司开发。该软件提供了全面的音频编辑和混音功能&#xff0c;包括录制、编曲、合成、采样等多种工具&#xff0c;可用于制作各种类型的音乐&#xff0c;如流行音乐、电子音乐、摇滚乐等。 Studio One的主要特点…

一文2000字从0到1手把手教你jmeter分布式压测

一、jmeter为什么要做分布式压测 jmeter本身的局限性 一台压力机的 Jmeter 支持的线程数受限于 Jmeter 其本身的机制和硬件配置&#xff08;内存、CPU等&#xff09;是有限的由于 Jmeter 是 Java 应用&#xff0c;对 CPU 和内存的消耗较大&#xff0c;在需要模拟大量并发用户…

论文中的算法/伪代码怎么写/理解

文章目录 第零步 基础知识第一步 创建latex文档&#xff0c;导入安装包第二步 写伪代码第三步 美化伪代码补充&#xff1a;latex无法显示中文 准备工作&#xff1a; overleaf&#xff1a;在线的latex文档编辑平台 algorithm2e&#xff1a;Latex的一个写算法的库 第零步 基础知识…

【树莓派 picamera】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言https://www.cnblogs.com/uestc-mm/p/7606855.html 一、picamera是什么&#xff1f;二、使用步骤1.引入库2.先要安装opencv 总结 前言 想用树莓派libcamera &a…

发货100虚拟商品自动发货系统存在SQL注入

漏洞描述 该系统存在SQL注入漏洞&#xff0c;可获取敏感信息及账号密码。 漏洞复现 构造SQL注入延时payload&#xff1a; M_id11%20AND%20(SELECT%208965%20FROM%20(SELECT(SLEEP(5)))sdhh)&typeproduct漏洞证明&#xff1a; 文笔生疏&#xff0c;措辞浅薄&#xff0c;…

C语言网络编程基础(linux)

目录 文件描述符与套接字网络编程的基本流程基础的函数和结构体&#xff08;持续更新&#xff09;socket函数sockaddr和sockaddr_in结构体bind函数listen函数accept函数recv函数writev函数readv函数connect函数fcntl函数 epoll相关函数epoll_createepoll_ctl函数epoll_wait函数…

竞赛 深度学习+python+opencv实现动物识别 - 图像识别

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 inception_v3网络5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; *…

生物标志物发现中的无偏数据分析策略

目录 0. 导论基本概念 1. 生物标志物发现的注意事项2. 数据预处理2.1 高质量原始数据和缺失值处理2.2 数据过滤2.3 数据归一化 3. 数据质量评估3.1 混杂因素3.2 类别分离3.3 功效分析3.4 批次效应 4. 生物标志物发现4.1 策略4.2 数据分析工具4.3 模型优化策略 0. 导论 组学技术…

Pytorch之MobileViT图像分类

文章目录 前言一、Transformer存在的问题二、MobileViT1.MobileViT网络结构&#x1f353; Vision Transformer结构&#x1f349;MobileViT结构 2.MV2(MobileNet v2 block)3.MobileViT block&#x1f947;Local representations&#x1f948;Transformers as Convolutions (glob…

三十四、【进阶】MySQL索引的操作

1、创建索引 &#xff08;1&#xff09;基础语法 &#xff08;2&#xff09;唯一索引 唯一索引与普通索引不同的是&#xff0c;索引列的数值必须唯一&#xff0c;但允许有空值null&#xff1b; 唯一索引与主键索引不同的是&#xff0c;主键索引不允许出现空值null&#xff0…

Webmin 远程命令执行漏洞_CVE-2019-15107

Webmin 远程命令执行漏洞_CVE-2019-15107 文章目录 Webmin 远程命令执行漏洞_CVE-2019-15107在线漏洞详情&#xff1a;漏洞描述&#xff1a;版本影响&#xff1a;环境搭建漏洞复现使用BP进行抓包POC发送以下POST请求来执行命令id:复现成功 漏洞利用-shell反弹执行反弹指令bp的i…