RestTemplate获取json数组
1、需求描述
接口返回的是一个json数组,要获取到接口返回值并用实体类list接住。

2、解决方法
使用springboot框间自带的Http的工具类RestTemplate调接口,其返回值用hutool工具包中的Json转换工具类方法JSONUtil.parseArray转为Json数组既可(接口返回的数组只是形式上为json数组,但实际上还是字符串,可以理解为Json格式的字符串)
pom.xml引入Hutool的依赖
       <!--引入Hutool-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.4.5</version>
        </dependency>测试代码
 @Test
    public void testGetJiaYang() {
        //SalaryHistoryInfoDTO salaryHistoryInfoDTO = new SalaryHistoryInfoDTO();
        HttpHeaders requestHeaders = new HttpHeaders();
        RestTemplate restTemplate = new RestTemplate();
        String result;
        String url = "http://localhost:10002/csm/customer/management/getPostData";
        String token = "eyJhbG";
        requestHeaders.add("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
        //鉴权传token
        requestHeaders.add("Authorization", token);
        MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
        map.add("funcId", "10");
        map.add("paras", "2022-06-30");
        //这里的map为请求接口时需要传的参数
        HttpEntity<Map> requestEntity = new HttpEntity<>(map, requestHeaders);
        //获取接口响应返回信息
        ResponseEntity<Map> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, Map.class);
        JSONArray jsonArray = JSONUtil.parseArray(response.getBody().get("data"));
        List<PostEntity> postEntityList = jsonArray.toList(PostEntity.class);
        for (PostEntity postEntity : postEntityList) {
            System.out.println(postEntity.toString());
        }
    }3、注意的点

使用JSONUtil.parseArray()方法把String转换成json数组时要注意不要手残加一个toString()方法


虽然hutool.json包下的重载方法JSONUtil.parseArray()支持多种参数,既支持String,也支持Object。但不建议把参数转为String,因为会报一个错

报错原因是不符合数组的形式。
可以对比一下response.getBody().get("data")和response.getBody().get("data").toString()的值的区别。

很明显response.getBody().get("data")的值是一个数组,且size=10
而response.getBody().get("data").toString()就是一个字符串,根本就不是数组,所以就转为JSONArray就会报错!
4、总结
使用JSONUtil.parseArray时传入的参数不要加toString()。
5、疑问
JSONUtil.JSONArray parseArray(String jsonStr)支持传入参数为String的这个重载的方法有什么用?传了String进来,然后用JSONArray接就会报错??????????????????

源码中该方法的返回类型不就是JSONArray吗?希望有懂的大佬可以回答一下,不胜感激!!!
6、参考资料
RestTemplate获取json数组的更多相关文章
- js 获取json数组里面数组的长度
		作为一个前端页面开发者第一次处理json数据,遇到了‘js 获取json数组里面数组的长度’?竟然不知道 json没有.length属性(真是要嘲讽下自己),少壮不努力老大徒伤悲啊!以前都是去寻求男朋 ... 
- 转载: java获取json数组格式中的值
		转自:https://www.cnblogs.com/kkxwze/p/11134846.html 第一种方法: String str = "{'array':[{'id':5,'nam ... 
- java获取json数组格式中的值
		第一种方法: String str = "{'array':[{'id':5,'name':'张三'},{'id':6,'name':'李四'}]}"; JSONArray jso ... 
- 使用jquery循环并获取 json 数组的键/值对
		var resultJSON = '{"FirstName":"John","LastName":"Doe"," ... 
- java获取Json和http状态码
		最近再做接口自动化测试,其中有几个方法比较重要 1.获取http状态码 /* * 返回接口状态码 * */ public static String getHttpCode(String url) { ... 
- Android-解析JSON数据(JSON对象/JSON数组)
		在上一篇博客中,Android-封装JSON数据(JSON对象/JSON数组),讲解到Android真实开发中更多的是去解析JSON数据(JSON对象/JSON数组) 封装JSON的数据是在服务器端进 ... 
- 微信小程序踩坑日记4——真机端解析json数组和开发平台不一样
		0. 引言 环境:访问服务器端php,获取json数组,并渲染在前台 问题描述:保证在开发平台上的正常运行,但是在真机端却出现了无法正确解析wx.request()返回的数据(特指无法解析res.da ... 
- c# 使用Newtonsoft.Json解析JSON数组
		一.获取JSon中某个项的值 要解析格式: [{"VBELN":"10","POSNR":"10","RET_ ... 
- 获取某个元素第一次出现在数组(json数组)的索引
		function firstIndex(arr, text) { // 若元素不存在在数组中返回-1 let firstVal = -1; for (let i = 0; i < arr.len ... 
- PHP/Post 提交请求获取json数据,并转化为所需要的数组
		/** * Post 提交请求获取json数据,并转化为所需要的数组 */ function request_post($url = '', $param = '') { if (empty($url ... 
随机推荐
- tensorflow-gpu版本安装及深度神经网络训练与cpu版本对比
			tensorflow1.0和tensorflow2.0的区别主要是1.0用的静态图 一般情况1.0已经足够,但是如果要进行深度神经网络的训练,当然还是tensorflow2.*-gpu比较快啦. 其中 ... 
- Linux 下指定端口开放访问权限
			Linux 下指定端口开放访问权限 作者:Grey 原文地址: 博客园:Linux 下指定端口开放访问权限 CSDN:Linux 下指定端口开放访问权限 环境 CentOS 系和 Debian 系的防 ... 
- LeetCode------两数之和(3)【数组】
			来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/two-sum 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 ... 
- 齐博x1如果把万能表单直接插入到内容中去
			很多时候,你创建了一个万能表单可能像下面这个情况,在文章中加一个链接叫别人点击填表,其实这个很不人性化,用户也容易忽略. 其实你完全可以像下面这样,把表单直接引用到文章中来.给用户更直观的感觉 那是如 ... 
- 22.通用视图GenericAPIView、属性和方法
			generics.ListCreateAPIView #源码 class ListCreateAPIView(mixins.ListModelMixin, mixins.CreateModelMixi ... 
- Codeforces Round #832 (Div. 2) A-D
			比赛链接 A 题解 知识点:贪心. 我们考虑把正数和负数分开放,显然把负数和正数放在一起的结果不会更优. 时间复杂度 \(O(n)\) 空间复杂度 \(O(1)\) 代码 #include <b ... 
- 成熟企业级开源监控解决方案Zabbix6.2关键功能实战-上
			@ 目录 概述 定义 监控作用 使用理解 监控对象和指标 架构组成 常用监控软件分析 版本选型 俗语 安装 部署方式 部署 zabbix-agent 概述 定义 Zabbix 官网地址 https:/ ... 
- 从0搭建vue3组件库: Input组件
			本篇文章将为我们的组件库添加一个新成员:Input组件.其中Input组件要实现的功能有: 基础用法 禁用状态 尺寸大小 输入长度 可清空 密码框 带Icon的输入框 文本域 自适应文本高度的文本域 ... 
- Java:ArrayList的基本使用(学习笔记)
			 集合和数组的对比(为什么要有集合) 分为俩点 1. 长度:数组的长度是固定的,集合的长度是可变的. 2. 存储类型: 数组:可以存储基本数据类型,引用数据类型. 集合:只能存储引用数据类型. 小t ... 
- 2022春每日一题:Day 19
			题目:吃奶酪 状压dp实现,dp[i][j]表示走过状态i,停到了j的位置的最小价值.枚举状态,起点终点,转移dp[i][j]=min{dp[i-(1<<s)][k]+dis(s,k)} ... 
