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、参考资料

java如何接收json数组 - CSDN

遇到 Caused by: cn.hutool.json.JSONException: Missing value at 1 [character 2 line 1]问题_风弥漫了夏天的博客-CSDN博客

RestTemplate获取json数组的更多相关文章

  1. js 获取json数组里面数组的长度

    作为一个前端页面开发者第一次处理json数据,遇到了‘js 获取json数组里面数组的长度’?竟然不知道 json没有.length属性(真是要嘲讽下自己),少壮不努力老大徒伤悲啊!以前都是去寻求男朋 ...

  2. 转载: java获取json数组格式中的值

    转自:https://www.cnblogs.com/kkxwze/p/11134846.html   第一种方法: String str = "{'array':[{'id':5,'nam ...

  3. java获取json数组格式中的值

    第一种方法: String str = "{'array':[{'id':5,'name':'张三'},{'id':6,'name':'李四'}]}"; JSONArray jso ...

  4. 使用jquery循环并获取 json 数组的键/值对

    var resultJSON = '{"FirstName":"John","LastName":"Doe"," ...

  5. java获取Json和http状态码

    最近再做接口自动化测试,其中有几个方法比较重要 1.获取http状态码 /* * 返回接口状态码 * */ public static String getHttpCode(String url) { ...

  6. Android-解析JSON数据(JSON对象/JSON数组)

    在上一篇博客中,Android-封装JSON数据(JSON对象/JSON数组),讲解到Android真实开发中更多的是去解析JSON数据(JSON对象/JSON数组) 封装JSON的数据是在服务器端进 ...

  7. 微信小程序踩坑日记4——真机端解析json数组和开发平台不一样

    0. 引言 环境:访问服务器端php,获取json数组,并渲染在前台 问题描述:保证在开发平台上的正常运行,但是在真机端却出现了无法正确解析wx.request()返回的数据(特指无法解析res.da ...

  8. c# 使用Newtonsoft.Json解析JSON数组

    一.获取JSon中某个项的值 要解析格式: [{"VBELN":"10","POSNR":"10","RET_ ...

  9. 获取某个元素第一次出现在数组(json数组)的索引

    function firstIndex(arr, text) { // 若元素不存在在数组中返回-1 let firstVal = -1; for (let i = 0; i < arr.len ...

  10. PHP/Post 提交请求获取json数据,并转化为所需要的数组

    /** * Post 提交请求获取json数据,并转化为所需要的数组 */ function request_post($url = '', $param = '') { if (empty($url ...

随机推荐

  1. CF600E Lomsat gelral (线段树合并)

    相当于是线段树合并的模板题,比(雨天的尾巴)还要板. 唯一注意的是线段树的更新,因为同一子树中可能有多种颜色占主导地位,要输出编号和,比如一颗子树中,1出现3次(最多),3出现3次,那么应该输出4. ...

  2. 浅谈-动态路由之OSPF的理解

    路由 在网络中,路由相当于就是一张地图,让路由器知道这个对应的IP数据包应该往哪端口.网段走:而这个"地图"我们称之为路由表,不同的目的IP路由表的下一个跳也不同,其生成方式有又有 ...

  3. golang开发:go并发的建议(完)

    上次说了一下Go语言布道师 Dave Cheney对Go并发的建议,个人觉得最重要的一条,这次主要想说一下这个. 8.3. Never start a goroutine without knowni ...

  4. Linux 下搭建 Hadoop 环境

    Linux 下搭建 Hadoop 环境 作者:Grey 原文地址: 博客园:Linux 下搭建 Hadoop 环境 CSDN:Linux 下搭建 Hadoop 环境 环境要求 操作系统:CentOS ...

  5. MVC下拉框

    <select> @{ foreach (var item in 循环泛型) { <option value="@item.ID">@item.属性名< ...

  6. 虚拟机里网络连接的几种方式说明(桥接,NAT, 仅主机)

    虚拟机里网络连接类型的选择: 桥接:选择桥接模式的话虚拟机和宿主机在网络上就是平级的关系,相当于连接在同一交换机上. NAT:NAT模式就是虚拟机要联网得先通过宿主机才能和外面进行通信. 仅主机:虚拟 ...

  7. iptables综合实验: 两个私有网络的互相通迅

    环境准备: 主机A IP:192.168.0.6/24 网关改为192.168.0.8 firewallA IP:eth1 192.168.0.8/24 eth0 10.0.0.8/24 删除默认路由 ...

  8. 表驱动法在STM32中的应用

    1.概念 所谓表驱动法(Table-Driven Approach)简而言之就是用查表的方法获取数据.此处的"表"通常为数组,但可视为数据库的一种体现.根据字典中的部首检字表查找读 ...

  9. 利用nginx自带的反向代理以及轮询功能实现应用的负载均衡

    针对中间件部署的应用(war包),可使用nginx自带的反向代理以及轮询功能,实现应用的负载均衡. 一.架构图 二.环境准备 准备2套环境,如19.1.0.18:7001,19.1.0.16:7001 ...

  10. java学习之SpringMVC

    0x00前言 Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet. Spring MVC 是结构最清晰的 Servlet+ ...