应用场景:
外围系统发来的请求,传递的json形式的string数据,即服务端要解析,落地!!!
package com.xx.epay.portal.converter;
import com.alibaba.fastjson.JSON;
import com.xx.xx.xx.pojo.PayOrderVO;
import java.lang.reflect.Field;
import java.util.*;
/**
* alibaba.fastjson jar 实现的转换(PayOrderVO与map中的key一一对应)
*/
public class PortalConverter {
/**
* 把固定信息(json)转化为VO
* @param payFixedBody
* @return
*/
public static PayOrderVO convertToVO(String payFixedBody) throws IllegalAccessException {
// 返回值
PayOrderVO retVO = new PayOrderVO();
// json转map
Map<String,String> map = new LinkedHashMap<>();
map = JSON.parseObject(payFixedBody, LinkedHashMap.class);
// 转换为有下标的集合
List<String> list = new ArrayList<>();
for (String key :map.keySet()) {
list.add(map.get(key));
}
// 获取自定义属性,包括public default protected private
Field[] fields = PayOrderVO.class.getDeclaredFields();
for (int i = 0; i < list.size(); i++) {
//private属性设置可访问权限
fields[i].setAccessible(true);
fields[i].set(retVO, list.get(i));
}
return retVO;
}
/**
* 测试
*/
public static void main(String[] args) throws IllegalAccessException {
Map<String,String> map = new LinkedHashMap<>();
map.put("payWay","111");
map.put("settlingWay","222");
map.put("createTime","333");
map.put("sellerName","444");
map.put("orderName","555");
map.put("orderNo","666");
map.put("saleManName","777");
map.put("saleManTel","888");
map.put("tradeType","999");
map.put("currency","aaa");
map.put("money","bbb");
map.put("source","ccc");
map.put("imgUrl","ddd");
String str = JSON.toJSONString(map);
System.out.println(str);
convertToVO(str);
}
}