需求说明:对接一个系统,对方系统要求每个字段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
* 邮 箱: [email protected]
*/
@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;
}
}
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
/**
* 服务申请接口请求参数字段
*/
@Data
public class ServiceDTO {
private CompanyDTO nytsydcompanyrequest;//用电企业 必选:true
private List<UserInfoDTO> nytsuserrequest;//用户 必选:true nytsuserrequest;//电站信息表 必选:true
private NytsPartnetDTO nytsPartnet;
private String debUserId;//电e宝用户编号 必选:true
private String debSessionId;//会话id 必选:true
private String timeStamp;//当前时间的毫秒值 必选:true
private 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;//账单日必选:true
private 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 默认初始值:0
private String discount;//折扣(打几折乘以多少)
private String signTime;//合同签订日期
private String image;//合同附件 格式为png转base64
private 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;
}
}
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;//开户行名称 必选:true
private String orgCode;//组织信用代码(统一社会信用代码) 必选:true 取业主统一社会信用代码(录入或企业认证)
private String bankAccount;//银行账户 必选:true
private 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"
}