public interface IDTO { void init(Dto inDto); }
package com.cnnct.zhk.balance.inaccountmanage.dto; import java.lang.reflect.Field; import java.lang.reflect.Method; import org.eredlab.g4.ccl.datastructure.Dto; import com.cnnct.common.ApplicationException; import com.cnnct.zhk.balance.common.BusinessErrorCode; /** * * @author rabbit * @date 2013-5-17 上午11:18:51 * @email [email protected] * */ public class BaseDTO implements IDTO { /** * 通过反射封装dto dot 就是那个mp * * @param aForm */ @Override public void init(Dto inDto) { Class<?> clz = this.getClass(); // 获取实体类的所有属性,返回Field数组 Field[] fields = clz.getDeclaredFields(); try { for (Field fld : fields) { Object obj = inDto.get(fld.getName()); if (null == obj || obj.equals("")) { continue; } String fldName = fld.getName(); fldName = textCapWords(textCapWords(fldName)); Method setMethod; setMethod = clz.getMethod("set" + fldName, fld.getType()); Object value = packageThisValue(fld.getType(), obj); setMethod.invoke(this, value); } } catch (NoSuchMethodException e) { throw new ApplicationException(BusinessErrorCode.GMFW_GS_ADD, "获取上传的数据转换为DTO时出错!", e); } catch (Exception e) { throw new ApplicationException(BusinessErrorCode.GMFW_GS_ADD, "获取上传的数据转换为DTO时出错!", e); } } private Object packageThisValue(Class<?> type, Object value) { Object obj; if (type.equals(byte.class)) { obj = Byte.class.getInterfaces(); } else if (type.equals(boolean.class)) { obj = Boolean.class.getInterfaces(); } else if (type.equals(short.class)) { obj = Short.class.getInterfaces(); } else if (type.equals(char.class)) { obj = Character.class.getInterfaces(); } else if (type.equals(int.class)) { obj = Integer.class.getInterfaces(); } else if (type.equals(long.class)) { obj = Long.class.getInterfaces(); } else if (type.equals(float.class)) { obj = Float.class.getInterfaces(); } else if (type.equals(double.class)) { obj = Double.class.getInterfaces(); } else { obj = type.getInterfaces(); } obj = value; return obj; } /** * 首字母大写 * * @param name * @return */ private static String textCapWords(String name) { StringBuilder newWords = new StringBuilder(name); newWords.insert(0, newWords.substring(0, 1).toUpperCase()); newWords.delete(1, 2); return newWords.toString(); } public static void main(String[] args) { System.out.println("get" + textCapWords("payWay")); } }
不同的业务dto
package com.cnnct.zhk.balance.inaccountmanage.entity; import com.cnnct.zhk.balance.inaccountmanage.dto.BaseDTO; public class Recharge4DTO extends BaseDTO { private int payWay; // 结算银行 private String settlementBank; // 凭证号 private String voucherNo; // 充值卡号 private String rechargeableCardNo; // 卡密码 private String passwd; // 冲值金额 private double totamt; //客户号 private String cliId; //贷方卡号 private String crCardNo; //交易码 private String tradeId; // 操作员 private String operationId; //网点 private String serId; //用户机构 private String orgId; protected String accreditMan; // 授权人 protected String accreditPass; // 授权人密码 public int getPayWay() { return payWay; } public void setPayWay(int payWay) { this.payWay = payWay; } public String getSettlementBank() { return settlementBank; } public void setSettlementBank(String settlementBank) { this.settlementBank = settlementBank; } public String getVoucherNo() { return voucherNo; } public void setVoucherNo(String voucherNo) { this.voucherNo = voucherNo; } public String getRechargeableCardNo() { return rechargeableCardNo; } public void setRechargeableCardNo(String rechargeableCardNo) { this.rechargeableCardNo = rechargeableCardNo; } public String getPasswd() { return passwd; } public void setPasswd(String passwd) { this.passwd = passwd; } public double getTotamt() { return totamt; } public void setTotamt(double totamt) { this.totamt = totamt; } public String getAccreditMan() { return accreditMan; } public void setAccreditMan(String accreditMan) { this.accreditMan = accreditMan; } public String getAccreditPass() { return accreditPass; } public void setAccreditPass(String accreditPass) { this.accreditPass = accreditPass; } public String getOperationId() { return operationId; } public void setOperationId(String operationId) { this.operationId = operationId; } public String getSerId() { return serId; } public void setSerId(String serId) { this.serId = serId; } public String getCrCardNo() { return crCardNo; } public void setCrCardNo(String crCardNo) { this.crCardNo = crCardNo; } public String getTradeId() { return tradeId; } public void setTradeId(String tradeId) { this.tradeId = tradeId; } public String getOrgId() { return orgId; } public void setOrgId(String orgId) { this.orgId = orgId; } public String getCliId() { return cliId; } public void setCliId(String cliId) { this.cliId = cliId; } @Override public String toString() { return "Recharge4DTO [accreditMan=" + accreditMan + ", accreditPass=" + accreditPass + ", cliId=" + cliId + ", crCardNo=" + crCardNo + ", operationId=" + operationId + ", orgId=" + orgId + ", passwd=" + passwd + ", payWay=" + payWay + ", rechargeableCardNo=" + rechargeableCardNo + ", serId=" + serId + ", settlementBank=" + settlementBank + ", totamt=" + totamt + ", tradeId=" + tradeId + ", voucherNo=" + voucherNo + "]"; } }
测试类:
public static void main(String[] args) { Dto inDto=new BaseDto(); inDto.put("settlementBank", "abc"); inDto.put("totamt", 12.12D); inDto.put("payWay", 10); System.out.println(inDto.toJson()); Recharge4DTO recharge4DTO=new Recharge4DTO(); recharge4DTO.init (inDto); System.out.println(recharge4DTO.getSettlementBank()); System.out.println(recharge4DTO.toString()); }