使用反射获取API数据并强制转为实例

例如获取API数据,以下只教思想,我下面也是代码也是大概写了写:

1.新建两个实例,一个是API提供方提供的API返回data,一个是本地用于接收的data数据,以下两个类虽然后者多几个字段,但是除多出那几个,其他的字段不论大小写必须一致。

// 接口方

@Data

public class RYZIdentityResponse{

        private String name;

        private String idCardNo;

        private String phone;

        private String addRess;

        private String birthday;

}

// 接收数据

@Data

public class RYZIdCardOcrUploadInfo{

        private String id;

        private String sqbh;

        private String yypch;

        private String name;

        private String idCardNo;

        private String phone;

        private String addRess;

        private String birthday;

}

2.获取API结果

import cn.hutool.core.util.ArrayUtil;

import org.apache.commons.beanutils.MethodUtils;

import org.springframework.beans.BeanUtils;

SyApiResult<Map<String,String>> result = null;

try{

        result = SyApiExecuteUtil.httpPost(param,url);

}catch(){

        throw new CommonException(ResCode.ERROR_BY.getCode(),result.getMessage());

}

Map<String,String> map = null;

if(result.isOK()){

        map = result.getResult();

}else{

        throw new CommonException(ResCode.ERROR_BY.getCode(),result.getMessage());

}

3.开始进行反射

// 创建实例,用于接受上述API中获取到的结果(这是根据接口提供方提供的接受对象)

RYZIdentityResponse invoce = new RYZIdentityResponse();

// 获取对象的属性,否则对象接口加字段,反射会报错
Method[] declaredMethods = invoice.getClass().getDeclaredMethods();
String[] strs = new String[declaredMethods.length];
for (int i = 0; i < declaredMethods.length; i++) {
        strs[i] = declaredMethods[i].getName();
}


for (Map.Entry<String,String> e : map.entrySet()) {
        String setter = "set" + StringUtil.reString(e.getKey());

        //2.判断是否在指定的方法内,避免反射报错
        if (ArrayUtil.contains(strs, setter)) {
                String value = e.getValue();
                MethodUtils.invokeMethod(invoice, setter, value);
        }
}

RYZIdCardOcrUploadInfo invoiceInfo = new RYZIdCardOcrUploadInfo();
BeanUtils.copyProperties(invoice,invoiceInfo); 
invoiceInfo.setSqbh(sqbh);
invoiceInfo.setYypch(ecmBusinessCode);
IfincarDAOUtils.getIfincarBaseDAO().save(invoiceInfo);

----------------------------------------上面会调用到到的地方-----------------------------------------

@Data
@Accessors(chain = true)
public class SyApiResult<T> {

        private boolean success;

        private String message;

        private T result;

        public static SyApiResult success(){
                return new SyApiResult().setSuccess(true);
        }

        public static SyApiResult fail(String message){
                return new SyApiResult().setMessage(message);
        }
}

public class StringUtil{

        /**
        * 将首字母或者_开头的字母转换为大写
        * @param str
        * @return
        */
        public static String reString(String str) {
        // 判断传入的字符串是否为空
                if (StringUtils.isBlank(str)) {
                        return "";
                }
                str = str.toLowerCase();
                str = str.substring(0, 1).toUpperCase() + str.substring(1);
                // 判断传入的字符串是否包含下划线,如果不包含直接返回
                if (!str.contains("_")) {
                        return str;
                }
                // 将符合条件的字符串进行拆分
                String[] splitArr = str.split("_");
                String change = "";
                String newStr = splitArr[0];
                // 遍历数组
                for (int i = 1; i < splitArr.length; i++) {
                        String substring = splitArr[i].substring(0, 1);
                        change = splitArr[i].replaceFirst(substring, substring.toUpperCase(Locale.ROOT));
                        newStr += change;
                }
                return newStr;
        }

}

.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实现图像处理和分析的关键技术

在计算机视觉中&#xff0c;我们可以利用摄像头捕捉到的图像来进行各种分析和处理。以下是一些常见的计算机视觉任务&#xff1a; 对象检测&#xff1a;识别图像中的特定对象并标注其位置。人脸识别&#xff1a;识别和验证人脸身份。姿态估计&#xff1a;估计人体的姿态和动作…

无纸化办公小程序数据交互、wxs的使用

前言 很多同志们再写小程序的过程中&#xff0c;不知道该怎么发起HTTP请求到后端&#xff0c;在Web环境中发起HTTPS请求是很常见的&#xff0c;但是微信小程序是腾讯内部的产品&#xff0c;不能直接打开一个外部的链接。例如&#xff0c;在微信小程序中不能直接打开www.taobao…

ASRPRO语音识别模块

ASRPRO语音识别模块 SOFT IIC 与PCA9685模块通信 pca9685 iic通信 地址位 ADDR<<1|0 左移一位 #define I2C_WRITE 0 #define I2C_READ 1 否则通信地址错误 asrpro 通过UART与电脑连接&#xff0c;可以进行简单的交互 将STM32作为接口扩展&#xff0c;通过SPI或I…

Seata学习

Seata Seata 是一款开源的分布式事务解决方案&#xff0c;致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 官网地址&#xff1a;https://seata.io/zh-cn/index.html 为什么会产生分布式事务&#xff1f; 示例&#xff1a;用户下单后需要创建订单&#xff0c;同时…

DDR电源硬件设计要点

一、DDR电源简介 1. 电源 DDR的电源可以分为三类: a、主电源VDD和VDDQ,主电源的要求是VDDQ=VDD,VDDQ是给IO buffer供电的电源,VDD是给但是一般的使用中都是把VDDQ和VDD合成一个电源使用。 有的芯片还有VDDL,是给DLL供电的,也和VDD使用同一电源即可。电源设计时,需要考…

最短路相关笔记

Floyd Floyd 算法&#xff0c;是一种在图中求任意两点间最短路径的算法。 Floyd 算法适用于求解无负边权回路的图。 时间复杂度为 O ( n 3 ) O(n^3) O(n3)&#xff0c;空间复杂度 O ( n 2 ) O(n^2) O(n2)。 对于两点 ( i , j ) (i,j) (i,j) 之间的最短路径&#xff0c;有…

如何让ChatGPT生成图片?

目录 一、那么如何解决让ChatGPT具有画图能力的问题呢&#xff1f; 二、那ChatGPT为什么能生成图片呢&#xff1f; 我们都知道ChatGPT只是个纯文本的AI模型&#xff0c;不具备画图能力。它可以生成文本&#xff0c;但如果让他生成图片就会显示如下的声明&#xff1a; 但通过本…

图像信号处理板设计原理图:2-基于6U VPX的双TMS320C6678+Xilinx FPGA K7 XC7K420T的图像信号处理板

综合图像处理硬件平台包括图像信号处理板2块&#xff0c;视频处理板1块&#xff0c;主控板1块&#xff0c;电源板1块&#xff0c;VPX背板1块。 一、板卡概述 图像信号处理板包括2片TI 多核DSP处理器-TMS320C6678&#xff0c;1片Xilinx FPGA XC7K420T-1FFG1156&#xff0c;1片X…

strcpy函数

文章目录 strcpy函数描述函数使用总结目标空间为什么必须可变&#xff1f;模拟实现 strcpy函数描述 重点&#xff1a;including the terminating null character (and stopping at that point).意为拷贝的值包括停止字符 传参时第一个参数为要拷贝参数&#xff0c;第二个参数为…

游戏盾如何有效防护DDoS

从进入计算机时代以来&#xff0c;DDoS攻击一直是网络世界中的一大威胁&#xff0c;让无数服务陷入瘫痪。这种攻击的原理非常简单&#xff1a;攻击者使用大量的僵尸主机或蠕虫病毒&#xff0c;向目标服务器发送海量请求&#xff0c;迅速耗尽服务器的资源&#xff0c;使其无法继…

某全球领先的芯片供应商:优化数据跨网交换流程,提高安全管控能力

1、客户介绍 某全球领先的芯片供应商&#xff0c;成立于2005年&#xff0c;总部设于北京&#xff0c;在国内上海、深圳、合肥等地及国外多个国家和地区均设有分支机构和办事处&#xff0c;致力于为客户提供更优质、便捷的服务。 2、建设背景 该公司基于网络安全管理的需求&am…

Datawhale学习笔记AI +新能源:电动汽车充电站充电量预测2

在飞浆平台上成功运行出pandas-profiling啦~ 首先一键安装 pip install ydata_profiling然后演示&#xff0c;可以生成一个网页对数据有一个比较好的理解 import numpy as np import pandas as pd from ydata_profiling import ProfileReporttrain_power pd.read_csv(/home/…

【论文阅读】以及部署BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework

BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework BEVFusion&#xff1a;一个简单而强大的LiDAR-相机融合框架 NeurIPS 2022 多模态传感器融合意味着信息互补、稳定&#xff0c;是自动驾驶感知的重要一环&#xff0c;本文注重工业落地&#xff0c;实际应用 融…

Flutter的Don‘t use ‘BuildContext‘s across async gaps警告解决方法

文章目录 问题有问题的源码 问题原因问题分析Context的含义BuildContext的作用特殊情况 解决方法 问题 Flutter开发中遇到Don’t use BuildContext’s across async gaps警告 有问题的源码 if (await databaseHelper.isDataExist(task.title)) {showDialog(context: context,…

想要精通算法和SQL的成长之路 - 找到最终的安全状态

想要精通算法和SQL的成长之路 - 找到最终的安全状态 前言一. 找到最终的安全状态1.1 初始化邻接图1.2 构建反向邻接图1.3 BFS遍历1.4 完整代码 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 找到最终的安全状态 原题链接 我们从题目中可以看出来&#xff1a; 出度为0的…

面向对象(基础)特征一:封装性(encapsulation)

文章目录 一、介绍&#xff08;1&#xff09;封装性&#xff08;2&#xff09;权限修饰符 二、案例&#xff08;1&#xff09;案例1 三、练习&#xff08;1&#xff09;练习1&#xff08;2&#xff09;练习2&#xff08;3&#xff09;练习3&#xff08;4&#xff09;练习4 面向…

html5 web前端 localStorage的存储,读取,删除

html5 web前端 localStorage的存储&#xff0c;读取&#xff0c;删除 我们通过以下方式将数据储存到localStorage中 window.localStorage.setItem(key,value) 但有时value为一个对象Object,以上面的方式写入,会出现读取的返回值为 {object Object}的情况,但这并不是我们想要的…

我做不到受每个人喜欢

我做不到受每个人喜欢 我想描述一下昨天发生争吵后我个人的观点&#xff0c;希望能够重新呈现出一种积极的态度。 首先&#xff0c;让我简要梳理一下事件的经过&#xff0c;当天我像往常一样去另一个宿舍找人聊天&#xff0c;可能因为说话声音有点大&#xff0c;坐在我后面的那…

MATLAB R2023b安装包下载链接及软件安装教程

参考链接&#xff1a;MATLAB R2023b安装包下载链接及软件安装教程

运维:mysql常用的服务器状态命令

目录 1、查询当前服务器运行的进程 2、查询最大链接数 3、查询当前链接数 4、展示当前正在执行的sql语句 5、查询当前MySQL当中记录的慢查询条数 6、展示Mysql服务器从启动到现在持续运行的时间 7、查询数据库存储占用情况 8、查询服务器启动以来的执行查询的总次数 9…