开发人员都知道:json是一种轻量级的数据交换格式,主要用于传送数据,它的优点在于格式都是压缩的, 占用带宽小,所以后台提供给app端的接口是json格式的数据。但后台查询数据库拿到大量的数据,假如不做任何处理直接抛出,一来就会导致网络传输慢,接口负载大,二来app端人员要面对垃圾数据,加大了取数据的难度,这时我们后台开发人员就会去想一个提升性能又方便app端人员的办法,接下来我就介绍这个方法。该方法纯属个人借鉴前辈思路提炼加工。
Map<Object, Object> obj = (Map<Object, Object>) resultMap.get(ResultCodeConstant.OBJ);//service层返回给controller的结果集
Map<Object, Object> fileRuleMap = new HashMap<Object, Object>();//装要过滤的字段
fileRuleMap.put("id", "orderId");//key对应数据集的字段,而value是给app端的字段
一行代码:
filterResultMap = ExcuteUtil.filterFormResultMap(obj, fileRuleMap); //核心方法
核心方法代码:
/**
* 过滤给app出参字段
* @param data 源数据
* @param filterRuleMap 出参字段
* @return
*/
public static Map<Object, Object> filterFormResultMap(Map<Object, Object> data, Map<Object, Object> filterRuleMap) {
Map<Object, Object> filterMap = new HashMap<Object, Object>();
//(1)先判断有没有要过滤的字段,没有的话返回源数据
if (filterRuleMap != null && filterRuleMap.size() > 0) {
if (data != null && data.size() > 0) {
//(2)迭代集合取值
Iterator<Object> it = data.keySet().iterator();
while (it.hasNext()) {
String key = StringUtil.trim(it.next());
Object val = StringUtil.trim(data.get(key));
if (filterRuleMap.containsKey(key)) {
filterMap.put(StringUtil.trim(filterRuleMap.get(key)), val);
}
}
}
} else {
filterMap.putAll(data);
}
return filterMap;
}
最后将结果转成json格式以流的方式输出:
String rs = JSONObject.fromObject(filterResultMap ).toString();
结语:上述方法只是支持Map格式的转换,如果你觉得不错、有用,下一篇将会介绍list,还有List<Map<Object,Object>>。