灵活接入第三方接口,解析第三方json数据,返回我们想要的json格式

需求:我想接入任意第三方http 接口(暂不考虑鉴权问题)、接口返回任意json数据。
1、要求返回的json数据通过我的R< T > 返回。
2、我的R< T > 里面包含参数 data,code,msg,success标识。
3、我的R< T > 里面的参数 data 匹配第三方接口的data,code匹配三方接口的code,msg匹配第三方接口的msg。

实现

@RestController
public class JsonDataExtractor {
    @PostMapping("/extplorJSON")
    public Object extplor() {
        //模拟接口返回数据
        String jsonString = "[{\n" +
                "    \"codeN\": 200,\n" +
                "    \"success\": true,\n" +
                "    \"date\": [{\n" +
                "        \"ALLCOUNT\": \"5\",\n" +
                "        \"ALLSUM\": \"6000\"\n" +
                "    }],\n" +
                "    \"msg\": \"操作成功\"\n" +
                "}\n" +
                "]";

        //1、成功code映射字符串标识
        String code  =  "codeN";
        //2、成功code标识码
        String codeNumber = "200";

        //3、接口返回数据字符串标识
        String data  =  "date";

        //4、接口返回内容描述
        String msg  =  "msg";
        //todo 1 2 3 4 替换为数据库查询

        // 模拟返回 R<T>
        Map<String,Object> restMap = new HashMap<>();
        restMap.put("success",true);
        restMap.put("code",200);
        restMap.put("msg","成功");

        ObjectMapper mapper = new ObjectMapper();
        try {
            JsonNode rootNode = mapper.readTree(jsonString);
            //判断code是否返回
            Object codeContent = findData(rootNode,  code);
            if (codeContent != null) {
                String codeStr = codeContent.toString();
                if (StringUtils.isEmpty(codeStr) || !codeStr.equals(codeNumber)) {
                    restMap.put("success",false);
                    restMap.put("code",400);
                    restMap.put("msg",findData(rootNode,  msg));
                    restMap.put("data",null);
                    return restMap;
                }
            }
            //code码通过,获取回显内容
            Object dataContent = findData(rootNode,  data);
            if (dataContent != null) {
                restMap.put("data",dataContent);
            } else {
                restMap.put("success",false);
                restMap.put("code",400);
                restMap.put("msg",data+"未找到");
                restMap.put("data",null);
            }
        } catch (IOException e) {
            e.printStackTrace();
            restMap.put("success",false);
            restMap.put("code",400);
            restMap.put("msg","失败");
            restMap.put("data",null);
        }
        return restMap;
    }

    public static Object findData(JsonNode node,String datas){
        try {
            if (node.has(datas)) {
                return node.get(datas);
            } else if (node.isObject() || node.isArray()) {
                for (JsonNode child : node) {
                    Object data = findData(child,datas);
                    if (data != null) {
                        return data;
                    }
                }
            }
        }catch (Exception e){
        }
        return null;
    }
}

返回的数据就变成了
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/939508.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ExcelVBA编程输出ColorIndex与对应颜色色谱

标题 ExcelVBA编程输出ColorIndex与对应颜色色谱 正文 解决问题编程输出ColorIndex与对应色谱共56&#xff0c;打算分4纵列输出&#xff0c;标题是ColorIndex,Color,Name 1. 解释VBA中的ColorIndex属性 在VBA&#xff08;Visual Basic for Applications&#xff09;中&#xff…

【常微分方程讲义1.1】方程的种类发展与完备

方程在数学历史中不断发展&#xff0c;逐步趋于完备。从最初的简单代数方程到包含函数、算子甚至泛函的更复杂方程&#xff0c;数学家通过不断的扩展和深化&#xff0c;逐渐建立起更为丰富和多元的方程类型体系。方程的种类之所以不断演变&#xff0c;部分是因为解决实际问题的…

Unity 组件学习记录:Aspect Ratio Fitter

概述 Aspect Ratio Fitter是 Unity 中的一个组件&#xff0c;用于控制 UI 元素&#xff08;如Image、RawImage等&#xff09;的宽高比。它在处理不同屏幕分辨率和尺寸时非常有用&#xff0c;可以确保 UI 元素按照预期的比例进行显示。当添加到一个 UI 对象上时&#xff0c;Aspe…

数智读书笔记系列010 生命3.0:人工智能时代 人类的进化与重生

书名&#xff1a;生命3.0 生命3.0&#xff1a;人工智能时代,人类的进化与重生 著者&#xff1a;&#xff3b;美&#xff3d;迈克斯•泰格马克 迈克斯・泰格马克 教育背景与职业 教育背景&#xff1a;迈克斯・泰格马克毕业于麻省理工学院&#xff0c;获物理学博士学位。职业经…

校园点餐订餐外卖跑腿Java源码

简介&#xff1a; 一个非常实用的校园外卖系统&#xff0c;基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化&#xff0c;提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合&am…

JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)

目录 JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能&#xff0c;JS中排序算法的使用详解&#xff08;附实际应用代码&#xff09; 一、为什么要使用Array.sort() 二、Array.sort() 的使用与技巧 1、基础语法 2、返回值 3、…

20241219解决荣品PRO-RK3566开发板适配gc2093摄像头之后通过HDMI输出的时候无法录像的问题

20241219解决荣品PRO-RK3566开发板适配gc2093摄像头之后通过HDMI输出的时候无法录像的问题 2024/12/19 19:37 使用荣品PRO-RK3566开发板配套的百度网盘中的SDK&#xff1a;rk-android13-20240713.tgz默认编译出来的IMG固件。 刷机之后&#xff0c;gc2093可以拍照&#xff0c;最…

ubuntu16.04ros-用海龟机器人仿真循线系统

下载安装sudo apt-get install ros-kinetic-turtlebot ros-kinetic-turtlebot-apps ros-kinetic-turtlebot-interactions ros-kinetic-turtlebot-simulator ros-kinetic-kobuki-ftdi sudo apt-get install ros-kinetic-rocon-*echo "source /opt/ros/kinetic/setup.bash…

YOLOv8目标检测(六)_封装API接口

YOLOv8目标检测(一)_检测流程梳理&#xff1a;YOLOv8目标检测(一)_检测流程梳理_yolo检测流程-CSDN博客 YOLOv8目标检测(二)_准备数据集&#xff1a;YOLOv8目标检测(二)_准备数据集_yolov8 数据集准备-CSDN博客 YOLOv8目标检测(三)_训练模型&#xff1a;YOLOv8目标检测(三)_训…

中后台管理信息系统:Axure12套高效原型设计框架模板全解析

中后台管理信息系统作为企业内部管理的核心支撑&#xff0c;其设计与实现对于提升企业的运营效率与决策能力具有至关重要的作用。为了满足多样化的中后台管理系统开发需求&#xff0c;一套全面、灵活的原型设计方案显得尤为重要。本文将深入探讨中后台管理信息系统通用原型方案…

uniapp使用腾讯地图接口的时候提示此key每秒请求量已达到上限或者提示此key每日调用量已达到上限问题解决

要在创建的key上添加配额 点击配额之后进入分配页面&#xff0c;分配完之后刷新uniapp就可以调用成功了。

【一篇搞定配置】如何在Ubuntu上配置单机/伪分布式Hadoop

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;各种软件安装与配置_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1.…

利用Python爬虫实现数据收集与挖掘

Python爬虫是一种自动化程序&#xff0c;可以模拟浏览器行为&#xff0c;自动地从互联网上抓取、分析和收集数据。Python爬虫通常使用requests、selenium等库来发送HTTP请求&#xff0c;获取网页内容&#xff0c;并使用BeautifulSoup、lxml等库来解析网页&#xff0c;提取所需的…

语音识别失败 chrome下获取浏览器录音功能,因为安全性问题,需要在localhost或127.0.0.1或https下才能获取权限

环境&#xff1a; Win10专业版 谷歌浏览器 版本 131.0.6778.140&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09; 问题描述&#xff1a; 局域网web语音识别出现识别失败 chrome控制台出现下获取浏览器录音功能&#xff0c;因为安全性问题&#xff0c;需要在…

springboot444新冠物资管理系统的设计与实现(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装新冠物资管理系统软件来发挥其高效地信息处理的作用&#x…

arcgisPro将面要素转成CAD多段线

1、说明&#xff1a;正常使用【导出为CAD】工具&#xff0c;则导出的是CAD三维多线段&#xff0c;无法进行编辑操作、读取面积等。这是因为要素面中包含Z值&#xff0c;导出则为三维多线段数据。需要利用【复制要素】工具禁用M值和Z值&#xff0c;再导出为CAD&#xff0c;则得到…

当我用影刀AI Power做了一个旅游攻略小助手

在线体验地址&#xff1a;旅游攻略小助手https://power.yingdao.com/assistant/ca1dfe1c-9451-450e-a5f1-d270e938a3ad/share 运行效果图展示&#xff1a; 话不多说一起看下效果图&#xff1a; 智能体的截图&#xff1a; 工作流截图&#xff1a; 搭建逻辑&#xff1a; 其实这…

计算机组成原理的学习笔记(2)--数据的表示和运算·其一

学习笔记 前言 本文主要是对于b站尚硅谷的计算机组成原理的学习笔记&#xff0c;仅用于学习交流。 正文 1. 浮点数表示 浮点数结构&#xff1a; 符号位&#xff08;1 位&#xff09;&#xff1a;表示数值的正负。 阶码&#xff08;8 位&#xff09;&#xff1a;表示指数部…

网络安全渗透有什么常见的漏洞吗?

弱口令与密码安全问题 THINKMO 01 暴力破解登录&#xff08;Weak Password Attack&#xff09; 在某次渗透测试中&#xff0c;测试人员发现一个网站的后台管理系统使用了非常简单的密码 admin123&#xff0c;而且用户名也是常见的 admin。那么攻击者就可以通过暴力破解工具&…

【AI图像生成网站Golang】项目测试与优化

AI图像生成网站 目录 一、项目介绍 二、雪花算法 三、JWT认证与令牌桶算法 四、项目架构 五、图床上传与图像生成API搭建 六、项目测试与优化 六、项目测试与优化 在开发过程中&#xff0c;性能优化是保证项目可扩展性和用户体验的关键步骤。本文将详细介绍我如何使用一…