• RestTemplate获取json数组


    1、需求描述

            接口返回的是一个json数组,要获取到接口返回值并用实体类list接住。

    2、解决方法

            使用springboot框间自带的Http的工具类RestTemplate调接口,其返回值用hutool工具包中的Json转换工具类方法JSONUtil.parseArray转为Json数组既可(接口返回的数组只是形式上为json数组,但实际上还是字符串,可以理解为Json格式的字符串)

    pom.xml引入Hutool的依赖

    1. <!--引入Hutool-->
    2. <dependency>
    3. <groupId>cn.hutool</groupId>
    4. <artifactId>hutool-all</artifactId>
    5. <version>5.4.5</version>
    6. </dependency>

    测试代码

    1. @Test
    2. public void testGetJiaYang() {
    3. //SalaryHistoryInfoDTO salaryHistoryInfoDTO = new SalaryHistoryInfoDTO();
    4. HttpHeaders requestHeaders = new HttpHeaders();
    5. RestTemplate restTemplate = new RestTemplate();
    6. String result;
    7. String url = "http://localhost:10002/csm/customer/management/getPostData";
    8. String token = "eyJhbG";
    9. requestHeaders.add("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
    10. //鉴权传token
    11. requestHeaders.add("Authorization", token);
    12. MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
    13. map.add("funcId", "10");
    14. map.add("paras", "2022-06-30");
    15. //这里的map为请求接口时需要传的参数
    16. HttpEntity<Map> requestEntity = new HttpEntity<>(map, requestHeaders);
    17. //获取接口响应返回信息
    18. ResponseEntity<Map> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, Map.class);
    19. JSONArray jsonArray = JSONUtil.parseArray(response.getBody().get("data"));
    20. List<PostEntity> postEntityList = jsonArray.toList(PostEntity.class);
    21. for (PostEntity postEntity : postEntityList) {
    22. System.out.println(postEntity.toString());
    23. }
    24. }

    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博客

  • 相关阅读:
    FAlphaBlend——Unreal中的插值助手
    MindSpore:测试mindspore的ascend用例编译失败
    Docker安全及日志管理
    每日算法刷题Day4-完全数、分情况输出、平方矩阵、斐波那契数列匹配输出
    设计模式中的黄金原则:引领你的代码风格,提升可维护性与扩展性
    最简最快了解RPC核心流程
    重试队列-让服务更健壮
    HTTP和Servlet快速入门
    Jenkins + Gitee 实现代码自动化构建 (超级详细)
    【华为OD机试真题 python】单词接龙【2022 Q4 | 100分】
  • 原文地址:https://blog.csdn.net/weixin_42032770/article/details/125548216