JSON转XML及反射调用对应的方法


import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;


import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.kakasure.api.dao.model.BankCard;
import com.kakasure.api.dao.model.BankData;


public class Bank2BMsgUtils extends Bank2BBaseXml {


/**
* 根据JSON 获取Xml

* @param jsonParam
* @return
* @throws Exception
*/
public static String getXml(String jsonParam) throws Exception {
String xmlStr = "";
if (jsonParam == null) {
return xmlStr;
} else {
JSONObject jsonObject = JSONObject.parseObject(jsonParam);
BankData data = new BankData();
parseJson(data, jsonObject);
String trCode = data.getTrCode();
Method method = Bank2BBaseXml.class.getMethod("getXML_" + trCode, BankData.class);
xmlStr = (String) method.invoke(null, data);
}
return xmlStr;
}


/**
* 解析JSON

* @param obj
* @param jsonObject
* @throws Exception
*/
private static <T extends Object> void parseJson(T obj, JSONObject jsonObject) throws Exception {
if (jsonObject == null) {
return;
}
Set<Entry<String, Object>> jsonSet = jsonObject.entrySet();
for (Entry<String, Object> entry : jsonSet) {
if (entry.getValue() instanceof JSONArray) {
JSONArray array = (JSONArray) entry.getValue();
List<BankCard> list = new ArrayList<>();
BankCard bankCard = null;
int size = array.size();
UnipayProperties config = UnipayProperties.getInstance();
int maxNums = config.getInt("detailNums");
if (size > maxNums) {
throw new IllegalArgumentException("BankCard 明细数据只允许"+maxNums+"条,请核实!");
}
for (int i = 0; i < size; i++) {
bankCard = new BankCard();
parseJson(bankCard, array.getJSONObject(i));
list.add(bankCard);
}
setObjValue(obj, "bankCards", list);
} else {
setObjValue(obj, entry.getKey(), entry.getValue());
}
}
}


/**
* 根据属性名称给对象赋值

* @param bankData
* @param paramName
* @param args
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
private static <T> void setObjValue(T obj, String paramName, Object args) throws Exception {
Class objClass = obj.getClass();
Method method = null;
if (args instanceof String) {
method = objClass.getMethod(getSetMethodName(paramName), String.class);
} else if (args instanceof List) {
method = objClass.getMethod(getSetMethodName(paramName), List.class);
}
method.invoke(obj, args);
}


/**
* 根据属性名称获取SET方法名称

* @param paramName
* @return
*/
private static String getSetMethodName(String paramName) {
return "set" + paramName.substring(0, 1).toUpperCase() + paramName.substring(1);
}


public static void main(String[] args) throws Exception {
// String jsonStr = "[\"name\":\"jack\",\"Student\":{\"]";
String jsonStr = "{\"payAcname\":\"jack\",\"reqNo\":\"18\",\"detail\":[{\"amt\":\"001\",\"busiNo\":\"c4\"}]}";
JSONObject jsonObject = JSONObject.parseObject(jsonStr);
BankData data = new BankData();
parseJson(data, jsonObject);
System.out.println(data.getPayAcname() + ",List = " + data.getBankCards().get(0).getBusiNo());
// System.out.println(jsonObject.get("student"));
}


}



model   :

public class BankCard {



private String busiNo;
private String cardFlag;
private String cardNo;
private String acname;
private String amt;

public String getBusiNo() {
return busiNo;
}
public void setBusiNo(String busiNo) {
this.busiNo = busiNo;
}
public String getCardFlag() {
return cardFlag;
}
public void setCardFlag(String cardFlag) {
this.cardFlag = cardFlag;
}
public String getCardNo() {
return cardNo;
}
public void setCardNo(String cardNo) {
this.cardNo = cardNo;
}
public String getAcname() {
return acname;
}
public void setAcname(String acname) {
this.acname = acname;
}
public String getAmt() {
return amt;
}
public void setAmt(String amt) {
this.amt = amt;
}
}




import java.util.List;


public class BankData {

private String trCode;
private String corpNo;
private String userNo;
private String reqNo;
private String trAcdt;
private String trTime;
private String atomTrCount;
private String channel;
private String reserved;
private String rcvBankName;
private String payAcno;
private String payAcname;
private String rcvAcno;
private String rcvAcname;
private String curCode;
//private String amt;
private String certNo;
private String summary;
private String bankFlag;
private String areaFlag;
private String sumAmt;
private String payMonth;
private String acno;
private String oglSerialNo;
private String bgnDate;
private String endDate;
private String agreeBusiNo;
private List<BankCard> bankCards;


public String getSumAmt() {
return sumAmt;
}
public void setSumAmt(String sumAmt) {
this.sumAmt = sumAmt;
}
public String getPayMonth() {
return payMonth;
}
public void setPayMonth(String payMonth) {
this.payMonth = payMonth;
}
public String getTrCode() {
return trCode;
}
public void setTrCode(String trCode) {
this.trCode = trCode;
}
public String getCorpNo() {
return corpNo;
}
public void setCorpNo(String corpNo) {
this.corpNo = corpNo;
}
public String getUserNo() {
return userNo;
}
public void setUserNo(String userNo) {
this.userNo = userNo;
}
public String getReqNo() {
return reqNo;
}
public void setReqNo(String reqNo) {
this.reqNo = reqNo;
}
public String getTrAcdt() {
return trAcdt;
}
public void setTrAcdt(String trAcdt) {
this.trAcdt = trAcdt;
}
public String getTrTime() {
return trTime;
}
public void setTrTime(String trTime) {
this.trTime = trTime;
}
public String getAtomTrCount() {
return atomTrCount;
}
public void setAtomTrCount(String atomTrCount) {
this.atomTrCount = atomTrCount;
}
public String getChannel() {
return channel;
}
public void setChannel(String channel) {
this.channel = channel;
}
public String getReserved() {
return reserved;
}
public void setReserved(String reserved) {
this.reserved = reserved;
}
public String getRcvBankName() {
return rcvBankName;
}
public void setRcvBankName(String rcvBankName) {
this.rcvBankName = rcvBankName;
}
public String getPayAcno() {
return payAcno;
}
public void setPayAcno(String payAcno) {
this.payAcno = payAcno;
}
public String getPayAcname() {
return payAcname;
}
public void setPayAcname(String payAcname) {
this.payAcname = payAcname;
}
public String getRcvAcno() {
return rcvAcno;
}
public void setRcvAcno(String rcvAcno) {
this.rcvAcno = rcvAcno;
}
public String getRcvAcname() {
return rcvAcname;
}
public void setRcvAcname(String rcvAcname) {
this.rcvAcname = rcvAcname;
}
public String getCurCode() {
return curCode;
}
public void setCurCode(String curCode) {
this.curCode = curCode;
}
public String getCertNo() {
return certNo;
}
public void setCertNo(String certNo) {
this.certNo = certNo;
}
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public String getBankFlag() {
return bankFlag;
}
public void setBankFlag(String bankFlag) {
this.bankFlag = bankFlag;
}
public String getAreaFlag() {
return areaFlag;
}
public void setAreaFlag(String areaFlag) {
this.areaFlag = areaFlag;
}
public String getAcno() {
return acno;
}
public void setAcno(String acno) {
this.acno = acno;
}
public String getOglSerialNo() {
return oglSerialNo;
}
public void setOglSerialNo(String oglSerialNo) {
this.oglSerialNo = oglSerialNo;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
public String getBgnDate() {
return bgnDate;
}
public void setBgnDate(String bgnDate) {
this.bgnDate = bgnDate;
}
public String getAgreeBusiNo() {
return agreeBusiNo;
}
public void setAgreeBusiNo(String agreeBusiNo) {
this.agreeBusiNo = agreeBusiNo;
}
public List<BankCard> getBankCards() {
return bankCards;
}
public void setBankCards(List<BankCard> bankCards) {
this.bankCards = bankCards;
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值