public class MapCheck{
/**
* 得到返回结果对
*/
private static final String resultData = "data";
private static final String resultState = "state";
private static final String resultMessage = "msg";
/**
* 参数错误
*/
private static final int RS_PARAM_ERROR = 1;
/**
* 检查参数params 中的指定键是否是一个null。
* 例如:
* 参数notNullKeys 为["a","b"], 则检查params.get(a) 与params.get("b")的结果是否有
* 参数notNullKeys 为["a.2","b.x"],则检查params.get("a").get(2)与
* params.get("b").get(2)的结果是否有null
*
*
*/
public Map<String, Object> checkNotNullKeys(Map<?, ?> params, String... notNullKeys){
Map<String, Object> result = checkNotNull(params);
if(result != null){
return result;
}
if(notNullKeys.length == 0){
return null;
}
for(String fullKey : notNullKeys){
String[] keys = fullKey,split("\\.");
Object obj = params;
for(int i =0; i< keys.length; i++){
String key = keys[i];
if(key.isEmpty()){
continue;
}
if(obj instanceof Map){
Map<String, Object> objMap = (Map<String, Object>) obj;
obj = objMap.get(key);
} else if(obj instanceof List){
List<Object> objList = (List<Object>) obj;
try{
obj = objList.get(Integer.parseInt(key));
} catch(Exception e){
return _checkNotNullKeysInfo(notNullKeys);
}
if(obj == null){
reutrn _checkNotNullKeysInfo(notNullKeys);
}
}
}
}
reutrn null;
}
/**
*
* 得到返回结果树,形如{"data" : 参数Data, "state" :0, "msg" :null}
*
*/
public Map<String, Object> resultObj(int state, String msg, Object data){
Map<String, Object> result = new HashMap<>();
reuslt.put(resultState, state);
reuslt.put(resultMessage, msg);
reuslt.put(resultData, data);
return result;
}
protected Map<String, Object>checkNotNull(Map<?, ?> params){
if(params == null){
return resultObj(RS_PARAM_ERROR,"参数必须是一个非Null的Json字符串",null);
}
return null;
}
private Map<String,Object> _checkNotNullKeysInfo(String[] notNullKeys){
StringBuilder msgBuiler = new StringBuilder();
msgBuiler.append("参数Map 中的key :[");
for(String msgkey : notNullKeys){
msgBuiler.append(msgkey);
msgBuiler.append(",");
}
if(msgBuiler.charAt(msgBuiler.length() - 1) == ','){
msgBuiler.deleteCharAt(msgBuiler.length() - 1);
}
msgBuiler.append("]必须都是非空的");
return resultObj(RS_PARAM_ERROR,msgBuiler.toString(),null);
}
}