通过反射批量修改属性值set,get方法 Field

需求说明:对接一个系统,对方系统要求每个字段value值加密,加密方法为WebAppAESUtil.encrypt,做之前就想做一个对属性统一操作的一个方法,反射完美的解决了这个问题,类似需求可以这样操作,下面是代码,反射是个好东西

反射工具类
import lombok.extern.slf4j.Slf4j;import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;/*** 类 名: FieldReflection* 描 述:* 作 者: binglong180* 创 建: 2020-07-02 11:23* 邮 箱: binglong172@163.com*/
@Slf4j
public class ReflectionUtils {public static Object  FieldReflection(Object oldObj) throws Exception{// 获取对象所有的实例域Field[] fields = oldObj.getClass().getDeclaredFields();// 获得访问私有实例域的权限AccessibleObject.setAccessible(fields, true);for (Field field : fields) {Class<?> type = field.getType();if ("String".equals(type.getSimpleName())) {Object obj = field.get(oldObj);if (obj != null) {String str = obj.toString();field.set(oldObj,WebAppAESUtil.encrypt(str));}}if ("CompanyDTO".equals(type.getSimpleName())){CompanyDTO companyDTO = (CompanyDTO) field.get(oldObj);if (companyDTO != null){companyDTO = (CompanyDTO) FieldReflection(companyDTO);field.set(oldObj,companyDTO);}}if ("List".equals(type.getSimpleName())){List<UserInfoDTO> userInfoDTOList = (List<UserInfoDTO>) field.get(oldObj);if (userInfoDTOList != null && userInfoDTOList.size()>0){List<UserInfoDTO> userInfoList = new ArrayList<>();for (UserInfoDTO item: userInfoDTOList ){if (item != null){item = (UserInfoDTO) FieldReflection(item);userInfoList.add(item);}}field.set(oldObj,userInfoList);}}}return oldObj;}}
1、ServiceDTO 实体类 有List 属性 及CompanyDTO 属性
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;import java.util.List;/*** 服务申请接口请求参数字段*/
@Data
public class ServiceDTO {private CompanyDTO nytsydcompanyrequest;//用电企业 必选:trueprivate List<UserInfoDTO> nytsuserrequest;//用户 必选:true nytsuserrequest;//电站信息表 必选:trueprivate NytsPartnetDTO nytsPartnet;private String debUserId;//电e宝用户编号 必选:trueprivate String debSessionId;//会话id 必选:trueprivate String timeStamp;//当前时间的毫秒值 必选:trueprivate String discountType;//优惠类型 必选:true 1固定折扣金额 ,2无折扣(固定电价),3固定优惠金额 ,4先减再乘,5先乘再减。private String status;//状态 必选:true 1正常 2失效private String startTime;//合同开始日期 必选:true 取合同相关信息private String endTime;//合同结束日期 必选:true 取合同相关信息private String billDay;//账单日必选:trueprivate String pvTopPrice;//光伏支付工厂尖电价 必选:true 录入private String pvPeakPrice;//光伏支付工厂峰电价 必选:true 录入private String pvFlatPrice;//光伏支付工厂平电价 必选:true 录入private String pvBottomPrice;//光伏支付工谷尖电价 必选:true 录入private String factoryTopPrice;//工厂支付光伏尖电价 必选:true 无信息,不传递private String factoryPeakPrice;//工厂支付光伏尖电价 必选:true 无信息,不传递private String factoryFlatPrice;//工厂支付光伏尖电价 必选:true 无信息,不传递private String factoryBottomPrice;//工厂支付光伏尖电价 必选:true 无信息,不传递private String fdHouseNumber;//发电户号 必选:true 录入private String preferential;//优惠(减多少) 必选:true 默认初始值:0private String discount;//折扣(打几折乘以多少)private String signTime;//合同签订日期private String image;//合同附件 格式为png转base64private String remark;//合同说明private String lastUpdateTime;//上次更新时间private String ydHouseNumber;//用电户号录入public static ServiceDTO getInitModel(){ServiceDTO serviceVo = new ServiceDTO();serviceVo.setChannelType("03");serviceVo.setStatus("1");serviceVo.setDiscountType("2");serviceVo.setPreferential("0");long timeMillis = System.currentTimeMillis();serviceVo.setTimeStamp(String.valueOf(timeMillis));// String token = cacheStore.getTokenCache().get(current.getId());// serviceVo.setDebSessionId(token);return serviceVo;}
}
CompanyDTO 类
import lombok.Data;/*** 用电企业字段*/
@Data
public class CompanyDTO {private String companyType;//公司类型 必选:true 1发电企业 2用电企业private String companyName;//公司名称 必选:true 取业主名称(录入或合同)private String groupCompany;//集团公司 必选:true 1隶属集团公司,2不是集团公司private String bankName;//开户行名称 必选:trueprivate String orgCode;//组织信用代码(统一社会信用代码) 必选:true 取业主统一社会信用代码(录入或企业认证)private String bankAccount;//银行账户 必选:trueprivate String address;//公司地址private String legalPerson;//公司法人 取业主法人姓名(录入或企业认证)private String telPhone;//公司联系电话private String province;//省 取企业认证申请时录入的相关信息private String city;//市 取企业认证申请时录入的相关信息private String area;//区 取企业认证申请时录入的相关信息}
运行后效果
加密前:
{"billDay": null,"channelType": "03","debSessionId": null,"debUserId": "00158368","discount": null,"discountType": "2","endTime": "2020-06-01","factoryBottomPrice": null,"factoryFlatPrice": null,"factoryPeakPrice": null,"factoryTopPrice": null,"fdHouseNumber": "132","image": null,"lastUpdateTime": null,"nytsPartnet": {"partnetname": ""},"nytsfdcompanyrequest": {"address": "天津市,市辖区,和平区","area": null,"bankAccount": "6272000020006544121","bankName": "工商银行","city": null,"companyName": "上海御漏管道工程有限公司","companyType": "1","groupCompany": "2","legalPerson": "兰兰","orgCode": "310118003050098","province": null,"telPhone": "13351111111"},"nytspowerstationrequest": {"address": "123","areaCode": "00168361","capacity": "10000.0000","fdHouseNumber": null,"nytspowerstationservicerequest": {"orderTime": null,"servicePeriod": "10","status": "1","termValidity": "2030-06-16","unitPrice": null},"stationName": null,"stationType": null},"nytsuserrequest": [{"address": null,"birthday": null,"contentType": "1","email": null,"idCard": null,"idCorwardImg": null,"idReverseImg": null,"nation": null,"nickName": null,"phone": "13351111111","photoUrl": null,"realName": null,"sex": null,"userType": "00","wechat": null}, {"address": null,"birthday": null,"contentType": "2","email": null,"idCard": null,"idCorwardImg": null,"idReverseImg": null,"nation": null,"nickName": null,"phone": "13351111111","photoUrl": null,"realName": null,"sex": null,"userType": "00","wechat": null}],"nytsydcompanyrequest": {"address": "天津市,市辖区,和平区","area": null,"bankAccount": "6272000020006544121","bankName": "工商银行","city": null,"companyName": "上海御漏管道工程有限公司","companyType": "2","groupCompany": "2","legalPerson": "兰兰","orgCode": "310118003050098","province": null,"telPhone": "13351111111"},"preferential": "0","pvBottomPrice": "10.0","pvFlatPrice": "10.0","pvPeakPrice": "10.0","pvTopPrice": "10.0","remark": null,"signTime": null,"startTime": "2020-05-01","status": "1","timeStamp": "1593655856654","ydHouseNumber": "132"
}加密后{"billDay": null,"channelType": "fcc1b6a60f46587174758d8732e8e462","debSessionId": null,"debUserId": "9a47daef5afeae59dd2743c0004c4bba","discount": null,"discountType": "1a3da64489b8c6722dafbad407691469","endTime": "171ae7996c4e06809d6ba84537b50c4e","factoryBottomPrice": null,"factoryFlatPrice": null,"factoryPeakPrice": null,"factoryTopPrice": null,"fdHouseNumber": "01e6db51b86d93ab6c3e82aa7615517d","image": null,"lastUpdateTime": null,"nytsPartnet": {"partnetname": "f9f5f4174d957aea15993b7e0d513ae6"},"nytsfdcompanyrequest": {"address": "b5cb9ce0779ef9eec64cb929c0304d99bb4620cffea9fa9176274ac07034aae6","area": null,"bankAccount": "4adc65a091aa74a60b4c311f697a39db57782e365ff7b846416d0c6463551d3d","bankName": "3a2519ef5285fb116fd38c111f4bb4c6","city": null,"companyName": "4a43479c06b3a226eb8fbea379097a1194296bb2ef4fca20beb000c34c8d31ca3d1243347193bdc44070027ad9116854","companyType": "8823fb5b75bf0b2b4b19a6d85e3bfce4","groupCompany": "1a3da64489b8c6722dafbad407691469","legalPerson": "a96ae23fa6279259a481f98c0272df84","orgCode": "91b387200bc3e768c33ef86404a251ee","province": null,"telPhone": "f244afac5cb1e511b3ebc51b2982b322"},"nytspowerstationrequest": {"address": "bb9e08229faca7138fc2e64f5d5e58af","areaCode": "f751ecf3877db29f985c2249788863ff","capacity": "cdb31240a0568d01ff9df18e46a11499","fdHouseNumber": null,"nytspowerstationservicerequest": {"orderTime": null,"servicePeriod": "890bb0e5fc386329d9e582bd600ccd0e","status": "8823fb5b75bf0b2b4b19a6d85e3bfce4","termValidity": "3b0e0990362adfaf1087d06a63241cb6","unitPrice": null},"stationName": null,"stationType": null},"nytsuserrequest": [{"address": null,"birthday": null,"contentType": "8823fb5b75bf0b2b4b19a6d85e3bfce4","email": null,"idCard": null,"idCorwardImg": null,"idReverseImg": null,"nation": null,"nickName": null,"phone": "f244afac5cb1e511b3ebc51b2982b322","photoUrl": null,"realName": null,"sex": null,"userType": "751f67e04de34515ef48ab063a68815e","wechat": null}, {"address": null,"birthday": null,"contentType": "1a3da64489b8c6722dafbad407691469","email": null,"idCard": null,"idCorwardImg": null,"idReverseImg": null,"nation": null,"nickName": null,"phone": "f244afac5cb1e511b3ebc51b2982b322","photoUrl": null,"realName": null,"sex": null,"userType": "751f67e04de34515ef48ab063a68815e","wechat": null}],"nytsydcompanyrequest": {"address": "b5cb9ce0779ef9eec64cb929c0304d99bb4620cffea9fa9176274ac07034aae6","area": null,"bankAccount": "4adc65a091aa74a60b4c311f697a39db57782e365ff7b846416d0c6463551d3d","bankName": "3a2519ef5285fb116fd38c111f4bb4c6","city": null,"companyName": "4a43479c06b3a226eb8fbea379097a1194296bb2ef4fca20beb000c34c8d31ca3d1243347193bdc44070027ad9116854","companyType": "1a3da64489b8c6722dafbad407691469","groupCompany": "1a3da64489b8c6722dafbad407691469","legalPerson": "a96ae23fa6279259a481f98c0272df84","orgCode": "91b387200bc3e768c33ef86404a251ee","province": null,"telPhone": "f244afac5cb1e511b3ebc51b2982b322"},"preferential": "4132f8c881031504cb8d0ad0e5ff37a8","pvBottomPrice": "a9321bf5b7bec7702c218852c4a2c545","pvFlatPrice": "a9321bf5b7bec7702c218852c4a2c545","pvPeakPrice": "a9321bf5b7bec7702c218852c4a2c545","pvTopPrice": "a9321bf5b7bec7702c218852c4a2c545","remark": null,"signTime": null,"startTime": "b5221eabb6ce34d33d3b1bedc2611c59","status": "8823fb5b75bf0b2b4b19a6d85e3bfce4","timeStamp": "c10b4c45d1235af1b48b62c8d1fdc0c1","ydHouseNumber": "01e6db51b86d93ab6c3e82aa7615517d"
}

java高级反射(一),通过反射批量修改属性值set,get方法 Field,对属性值进行统一操作相关推荐

  1. java 修改txt_Java实现批量修改txt文件名称的方法示例

    本文实例讲述了Java实现批量修改txt文件名称的方法.分享给大家供大家参考,具体如下: 最近在做特征选择的实验时,需要批量修改一下文件名称,在这里做一下记录. package com.cqu.exp ...

  2. 批量修改php用什么,php批量修改指定文件后缀的方法

    php批量修改指定文件后缀的方法 发布于 2014-09-14 18:52:21 | 150 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Pr ...

  3. 批量修改图片名称的快捷方法

    批量修改图片名称的快捷方法!如果你是一名电商运营人员,每天都需要拍摄大量的产品图片,时间久了电脑里会保存大量的产品图片,杂乱无章的图片名称,可能会导致图片的丢失或者删除,查找图片的时候也会比较的麻烦. ...

  4. php 批量修改文件名后缀名,PHP实现批量修改文件后缀名的方法

    本文实例讲述了PHP实现批量修改文件后缀名的方法.分享给大家供大家参考.具体如下: /** * 批量修改文件后缀名 * @param $path 文件夹路径 * @param $sext 原文件后缀名 ...

  5. php 批量改文件名后缀名_php 实现批量修改文件后缀名的方法详解

    这篇文章主要介绍了PHP实现批量修改文件后缀名的方法,涉及php针对文件的递归遍历及重命名的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了PHP实现批量修改文件后缀名的方法.分享 ...

  6. php 批量改文件名后缀名_PHP实现批量修改文件后缀名的方法

    本文实例讲述了php实现批量修改文件后缀名的方法.分享给大家供大家参考.具体如下: /** * 批量修改文件后缀名 * @param $path 文件夹路径 * @param $sext 原文件后缀名 ...

  7. bat修改win8计算机名,Win7/win8系统下利用批处理文件批量修改文件后缀名的方法...

    大家都知道,文件后缀名也叫文件扩展名,是用来表示某种文件格式所采用的机制,不过有时候有需要想要修改文件的后缀名类型,一般都是通过右键修改重命名来完成的,但是如果需要修改多个文件后缀名的话一个个修改太麻 ...

  8. html ios音乐自动播放muted,video下autoplay属性无效的解决方法(添加muted属性)

    背景:video下载入ogg格式视频,并设置自动播放属性autoplay,但是使用Chrome预览时,视屏画面已加载出来,但是无法自动播放,F5刷新后可以自动播放.使用火狐浏览器可以自动播放.最初代码 ...

  9. 织梦php开发tags功能开发,DedeCms织梦二次开发批量添加tag标签 批量修改TAG标签功能的方法...

    需求背景: 之前发布了不少文章,后来发现之前的这些文章当时发布时都没有添加tag标签,然而现在需要都添加上tag标签,然而这个在默认的织梦后台是没办法批量实现的,只能一篇篇文章去修改. 思考: 织梦原 ...

最新文章

  1. arcengine 加载地图不显示_地图建筑建模制作与输出
  2. HTML5:理解head
  3. 名片去噪识别-aip
  4. 一些面试题(JAVA)
  5. win10 详细配置JAVA环境变量(最详细),操作步骤如下:
  6. java做日历怎么对齐日期_如何使用Java日历从日期中减去X天?
  7. 配置管理小报110904:htpasswd: The file passwd does not appear to be a valid htpasswd file.
  8. 数据科学生命周期_数据科学项目生命周期第1部分
  9. 解密GaussDB(for Influx)时序洞察
  10. 交个朋友回应罗永浩撰文事故:系没有处理好内部流程导致的误解
  11. C++字符串(string/to_string/append/substr/length/find/rfind/replace/stoi转数字转int)
  12. Windows服务器上使用phpstudy部署PHP程序
  13. Error: 未绑定为第三方平台的开发小程序
  14. 【迅速上手】Python 画图 —— 柱状图
  15. 济南大学Oj系统c语言,“浪潮杯”第十届山东省大学生ACM程序设计竞赛在济南大学举行...
  16. 微软服务器探针产品,服务器云探针
  17. Homography单应性矩阵原理
  18. 工业物联网快速解决方案
  19. mysql 分区 线性hash_MySQL表分区(3)哈希分区-hash
  20. Linux4步快速搭建DNS服务器

热门文章

  1. Vue-cli中 vue.config.js 的配置详解
  2. 【出行】查看哈啰出行顺风车司机自己的评分,信任分
  3. 首家试水企业微信客户社群运营的春秋航空,给其他航司带来了怎样的启示?
  4. windows解决注册表 .exe 打开方式修改为%1的(所有的.exe文件全都打不开)问题
  5. python多变量同时赋值
  6. android定制化软件修改或添加按键驱动的核心操作步骤讲解
  7. Cleave js 使用
  8. Maxon one系列现已推出
  9. 银行借记卡收费项目一览
  10. Redisson联锁