12.SpringBoot之RestTemplate的使用

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
导出的csv文件命名为stock_basic.csv

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);
   }
}

  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

septnancye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值