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. PHP全栈开发(五):PHP学习(2. echo 和 print 输出、数组、foreach循环、字符串)

    在PHP中有两个基本的输出语句,就是echo 和 print 这两个东东有什么不同呢. echo 可以一次输出一个或者多个字符: echo "这是一个", "字符串,&q ...

  2. python今日分享(内置方法)

    目录 一.习题详解 二.数据类型的内置方法理论 三.整型相关操作 四.浮点型相关操作 五.字符串相关操作 六.列表相关操作 今日详解 一.习题详解 1.计算1-100所有数据之和 all_num = ...

  3. fileinput 的总结

    fileinput组件实战总结 fileinput是一个增强的基于Bootstrap3.x和HTML5的文件上传工具,具备多种格式文件的预览功能, 另外,它包含了基于AJAX的上传,拖拽和撤销文件,可 ...

  4. struts项目向前台返回图片。

    读取项目路径WebRoot下的图片 编写action package com.sadj.market.action; import java.io.BufferedInputStream; impor ...

  5. Js实现一键复制小功能

    function copyToClipboard(textToCopy) { // navigator clipboard 需要https等安全上下文 if (navigator.clipboard ...

  6. 极客的浪漫「GitHub 热点速览 v.22.41」

    极客的浪漫,是怀旧复古的开源操作系统 SerenityOS 献上的情书:也是实用派用 AI 作画工具 novelai-bot 生成二次元女友.LxgwWenKai 用仿宋 / 楷体中文字体书写而成的那 ...

  7. Mybatis组件介绍

    核心组件 SqlSessionFactoryBuilder SqlSessionFactoryBuilder的作用就是通过XML或者Java代码来建造一个工厂(SqlSessionFactory),并 ...

  8. 齐博x1如何录制阿里等第三方直播流

    暂时只支持windows录制,可以在你本地电脑进行录制体验.点击下面的网址,下载录制程序文件,直接解压到任何一个目录都可以.里边同时包含自建直播服务器的功能,不用自建直播流的话,就可以忽视相关配置即可 ...

  9. QML 怎么调用 C++ 中的内容?

    以下内容为本人的学习笔记,如需要转载,请声明原文链接微信公众号「englyf」https://mp.weixin.qq.com/s/z_JlmNe6cYldNf11Oad_JQ 先说明一下测试环境 编 ...

  10. vim常用快捷键总结一(光标移动命令)

    vim编辑器的工作模式分为3种即(命令模式,编辑模式和尾行模式),具体定义这里就不在赘述了,这里只简单介绍各工作模式下对应的操作和快捷方式. 通常来说三三种模式功能划分大致如下 命令模式:定位.翻页. ...