
io.rong.util.CommonUtil Maven / Gradle / Ivy
package io.rong.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import io.rong.models.group.GroupBanModel;
import io.rong.models.group.GroupModel;
import io.rong.models.response.*;
import io.rong.models.user.UserModel;
import org.apache.commons.lang3.StringUtils;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.*;
/**
* 属性校验公共服务
*
* @author RongCloud
*/
public class CommonUtil {
public static final String VERIFY_JSON_NAME = "/verify.json";
public static final String API_JSON_NAME = "/api.json";
public static final String CHRARCTER = "UTF-8";
private static String sdkVersion = null;
public static boolean validateParams(Object params, int length) {
try {
if (null == params) {
return false;
}
if (params instanceof String[]) {
String[] param = (String[]) params;
int len = param.length;
if (len <= length) {
return true;
}
} else if (params instanceof String) {
String param = (String) params;
int len = param.length();
if (len <= length) {
return true;
}
} else if (params instanceof Integer) {
Integer param = (Integer) params;
if (param <= length) {
return true;
}
}
} catch (Exception e) {
System.out.println("长度校验错误" + e);
}
return false;
}
/**
* 参数校验方法
*
* @param model 校验对象
* @param path 路径
* @param method 需要校验方法
* @return String
**/
public static String checkFiled(Object model, String path, String method) {
try {
String code = "200";
Integer max = 64;
//api.json 的路径
String apiPath = path;
String type = "";
if (path.contains("/")) {
path = path.substring(0, path.indexOf("/"));
}
String[] fileds = {};
String checkObjectKey = "";
//获取需要校验的参数
Map checkInfo = getCheckInfo(apiPath, method);
for (Map.Entry entry : checkInfo.entrySet()) {
fileds = entry.getValue();
checkObjectKey = entry.getKey();
}
if (null == model) {
String message = (String) CommonUtil
.getErrorMessage(apiPath, method, "20005", "object", String.valueOf(max), "1", type, 0);
return message;
}
//获取校验文件
JSONObject verify = JsonUtil.getJsonObject(path, VERIFY_JSON_NAME);
//获取校验key
Set keys = verify.getJSONObject(checkObjectKey).keySet();
//获取具体校验规则
JSONObject entity = verify.getJSONObject(checkObjectKey);
int size = 0;
for (String name : fileds) {
for (String key : keys) {
if (name.equals(key)) {
String nameTemp = name;
//将属性的首字符大写,方便构造get,set方法
name = name.substring(0, 1).toUpperCase() + name.substring(1);
//获取属性的类型
//String type = field.getGenericType().toString();
Method m = model.getClass().getMethod("get" + name);
//获取字段的具体校验规则
JSONObject object = entity.getJSONObject(nameTemp);
if (object.containsKey("require")) {
Boolean must = (Boolean) object.getJSONObject("require").get("must");
if (m.invoke(model) instanceof String) {
String value = (String) m.invoke(model);
if (StringUtils.isBlank(value)) {
code = (String) object.getJSONObject("require").get("invalid");
}
} else {
Object value = (Object) m.invoke(model);
if (null == value) {
code = (String) object.getJSONObject("require").get("invalid");
}
}
}
if (object.containsKey("length")) {
max = (Integer) object.getJSONObject("length").get("max");
//String value = (String) m.invoke(model);
if (m.invoke(model) instanceof String) {
String value = (String) m.invoke(model);
if ("200".equals(code) && StringUtils.isBlank(value)) {
code = (String) object.getJSONObject("length").get("invalid");
}
if ("200".equals(code) && value.length() > max) {
size = value.length();
code = (String) object.getJSONObject("length").get("invalid");
}
} else if (m.invoke(model) instanceof String[]) {
String[] value = (String[]) m.invoke(model);
if ("200".equals(code) && value.length > max) {
size = value.length;
code = (String) object.getJSONObject("length").get("invalid");
}
}/*else{
Object value = (Object) m.invoke(model);
if(!"200".equals(code)){
code = (String)object.getJSONObject("length").get("invalid");
}
}*/
}
if (object.containsKey("size")) {
max = (Integer) object.getJSONObject("size").get("max");
type = (String) object.getJSONObject("typeof").get("type");
if (type.contains("array")) {
Object[] value = (Object[]) m.invoke(model);
if ("200".equals(code) && null == value) {
code = (String) object.getJSONObject("size").get("invalid");
}
if ("200".equals(code) && value.length > max) {
size = value.length;
code = (String) object.getJSONObject("size").get("invalid");
}
} else if (type.contains("int")) {
Integer value = 0;
try {
value = (Integer) m.invoke(model);
} catch (Exception e) {
code = (String) object.getJSONObject("typeof").get("invalid");
}
if ("200".equals(code) && null == value) {
code = (String) object.getJSONObject("size").get("invalid");
}
if ("200".equals(code) && value > max) {
size = value;
code = (String) object.getJSONObject("size").get("invalid");
}
}
}
if (!"200".equals(code)) {
//根据错误吗获取错误信息
String message = (String) CommonUtil
.getErrorMessage(apiPath, method, code, name, String.valueOf(max), "1", type, size);
// 对 errorMessage 替换 目前不需要替换
// message = StringUtils.replace(message,"errorMessage","msg");
return message;
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 参数校验
*
* @param checkFiled 需要校验的字段
* @param value 传入参数值
* @param path 路径 (获取校验文件路径)
* @param method 需要校验方法
* @return String
**/
public static String checkParam(String checkFiled, Object value, String path, String method) {
try {
String code = "200";
boolean flag = false;
Integer max = 64;
String type = "";
String apiPath = path;
if (path.contains("/")) {
path = path.substring(0, path.indexOf("/"));
}
//String[] fileds = {};
String checkObject = "";
//获取需要校验的key
Map checkInfo = getCheckInfo(apiPath, method);
for (Map.Entry entry : checkInfo.entrySet()) {
//fileds = entry.getValue();
checkObject = entry.getKey();
}
JSONObject verify = JsonUtil.getJsonObject(path, VERIFY_JSON_NAME);
Set keys = verify.getJSONObject(checkObject).keySet();
JSONObject entity = verify.getJSONObject(checkObject);
int size = 0;
for (String key : keys) {
if (checkFiled.equals(key)) {
JSONObject object = entity.getJSONObject(checkFiled);
if (object.containsKey("require")) {
Boolean must = (Boolean) object.getJSONObject("require").get("must");
if (value instanceof String) {
if (StringUtils.isBlank(String.valueOf(value))) {
code = (String) object.getJSONObject("require").get("invalid");
}
} else {
if (null == value) {
code = (String) object.getJSONObject("require").get("invalid");
}
}
}
if (object.containsKey("length")) {
max = (Integer) object.getJSONObject("length").get("max");
if (value instanceof String) {
if ("200".equals(code) && StringUtils.isBlank(String.valueOf(value))) {
code = (String) object.getJSONObject("length").get("invalid");
}
if ("200".equals(code) && String.valueOf(value).length() > max) {
size = String.valueOf(value).length();
code = (String) object.getJSONObject("length").get("invalid");
}
} else if (value instanceof String[]) {
String[] valueTemp = {};
try {
valueTemp = (String[]) value;
} catch (Exception e) {
code = (String) object.getJSONObject("typeof").get("invalid");
}
if ("200".equals(code) && valueTemp.length > max) {
code = (String) object.getJSONObject("length").get("invalid");
}
}
}
if (object.containsKey("size")) {
max = (Integer) object.getJSONObject("size").get("max");
type = (String) object.getJSONObject("typeof").get("type");
if (type.contains("array")) {
String[] valueTemp = null;
if ("200".equals(code) && null == value) {
code = (String) object.getJSONObject("size").get("invalid");
}
try {
valueTemp = (String[]) value;
} catch (Exception e) {
code = (String) object.getJSONObject("typeof").get("invalid");
}
if ("200".equals(code) && valueTemp.length > max) {
size = valueTemp.length;
code = (String) object.getJSONObject("size").get("invalid");
}
} else if (type.contains("int")) {
Integer valueTemp = 64;
try {
valueTemp = (Integer) value;
} catch (Exception e) {
code = (String) object.getJSONObject("typeof").get("invalid");
}
if ("200".equals(code) && null == value) {
code = (String) object.getJSONObject("size").get("invalid");
}
if ("200".equals(code) && valueTemp > max) {
size = valueTemp;
code = (String) object.getJSONObject("size").get("invalid");
}
}
}
String message = (String) CommonUtil
.getErrorMessage(apiPath, method, code, checkFiled, String.valueOf(max), "1", type, size);
//message = StringUtils.replace(message,"errorMessage","msg");
return message;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 获取错误信息
*
* @param path 路径 (获取校验文件路径)
* @param method 校验方法(需要校验的方法)
* @param errorCode 错误码
* @param name 具体字段名
* @param max 字段需要的最大值
* @param min 字段的最小值
* @param type 类型
* @return Map
**/
public static Object getErrorMessage(String path, String method, String errorCode, String name, String max,
String min, String type, int size) {
JSONObject api = null;
try {
api = JsonUtil.getJsonObject(path, API_JSON_NAME);
Set> keys = api.getJSONObject(method).getJSONObject("response")
.getJSONObject("fail").entrySet();
String[] serchList = {"{{name}}", "{{max}}", "{{name}}", "{{min}}", "{{currentType}}", "{{size}}"};
String[] replaceList = {name, max, name, min, type, String.valueOf(size)};
for (Map.Entry entry : keys) {
if (errorCode.equals(entry.getKey())) {
String text = entry.getValue().toString();
//StringUtils.replaceEach(text,serchList,replaceList);
return StringUtils.replaceEach(text, serchList, replaceList);
}
}
} catch (IOException e) {
}
return null;
}
/**
* 获取校验信息
*
* @param path 路径 (获取校验文件路径)
* @param method 校验方法(需要校验的方法)
* @return Map
**/
public static Map getCheckInfo(String path, String method) {
JSONObject api = null;
try {
api = JsonUtil.getJsonObject(path, API_JSON_NAME);
Set keys = api.getJSONObject(method).getJSONObject("params").keySet();
String key = keys.iterator().next();
Set subkeys;
try {
Object object = api.getJSONObject(method).getJSONObject("params").get(key);
if (null != object && object instanceof JSONObject) {
subkeys = api.getJSONObject(method).getJSONObject("params").getJSONObject(key).keySet();
} else {
subkeys = keys;
}
Map map = new HashMap<>();
map.put(key, subkeys.toArray(new String[subkeys.size()]));
return map;
} catch (ClassCastException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 获取response信息
*
* @param path 路径 (获取校验文件路径)
* @param method 校验方法(需要校验的方法)
* @param response 返回信息
* @return String
**/
public static String getResponseByCode(String path, String method, String response) {
JSONObject api = null;
try {
JSONObject object = JSON.parseObject(response);
String code = String.valueOf(object.get("code"));
api = JsonUtil.getJsonObject(path, API_JSON_NAME);
Set> keys = api.getJSONObject(method).getJSONObject("response")
.getJSONObject("fail").entrySet();
String text = response;
if (code.equals("200")) {
if (path.contains("blacklist") && method.equals("getList")) {
UserList userList = (UserList) GsonUtil.fromJson(response, UserList.class);
UserModel[] members = parseUserList(userList);
BlackListResult blacklist = new BlackListResult(userList.getCode(), null, members);
text = blacklist.toString();
} else if (path.contains("user/whitelist") && method.equals("getList")) {
UserList userList = (UserList) GsonUtil.fromJson(response, UserList.class);
UserModel[] members = parseUserList(userList);
PWhiteListResult whitelist = new PWhiteListResult(userList.getCode(), null, members);
text = whitelist.toString();
} else if (path.contains("whitelist/user") && method.equals("getList")) {
UserList userList = (UserList) GsonUtil.fromJson(response, UserList.class);
UserModel[] members = parseUserList(userList);
WhiteListResult whitelist = new WhiteListResult(userList.getCode(), null, members);
text = whitelist.toString();
} else if (path.contains("chatroom") || path.contains("group")) {
text = StringUtils.replace(response, "users", "members");
if (text.contains("whitlistMsgType")) {
text = StringUtils.replace(text, "whitlistMsgType", "objectNames");
}
if (path.contains("gag") || path.contains("block") || path.contains("ban/user")) {
text = StringUtils.replace(text, "userId", "id");
}
if (path.contains("mute")) {
if (path.contains("member")) {
text = StringUtils.replace(text, "\"userId\"", "\"id\"");
}
GroupBanModel groupBanModel = (GroupBanModel) GsonUtil.fromJson(response, GroupBanModel.class);
GroupBanInfo[] groupBanInfos = groupBanModel.getGroupinfo();
ArrayList groupinfos = new ArrayList<>();
if (null != groupBanInfos) {
for (GroupBanInfo groupBanInfo : groupBanInfos) {
groupinfos.add(new GroupModel(groupBanInfo.getGroupId(), groupBanInfo.getStat()));
}
GroupModel[] groupModels = groupinfos.toArray(new GroupModel[groupinfos.size()]);
GroupBanResult groupBanResult = new GroupBanResult(groupBanModel.getCode(), null,
groupModels);
text = groupBanResult.toString();
}
}
if (path.equals("group/ban") && method.equals("getList")) {
text = StringUtils.replace(response, "\"groupinfo\"", "\"groups\"");
text = StringUtils.replace(text, "\"groupId\"", "\"id\"");
text = StringUtils.replace(text, "\"stat\"", "\"status\"");
}
} else if (path.contains("user")) {
if (path.contains("block") || path.contains("blacklist")) {
text = StringUtils.replace(response, "userId", "id");
}
} else if (path.contains("sensitiveword")) {
text = StringUtils.replace(response, "word", "keyword");
if (text.contains("keywords")) {
text = StringUtils.replace(text, "keywords", "words");
}
text = StringUtils.replace(text, "replaceWord", "replace");
} else {
text = response;
}
return text;
} else {
for (Map.Entry entry : keys) {
if (code.equals(entry.getKey())) {
text = entry.getValue().toString();
//text = StringUtils.replace(text,"msg","errorMessage");
return text;
}
}
//text = StringUtils.replace(response,"errorMessage","msg");
if (path.contains("chatroom")) {
text = StringUtils.replace(text, "users", "members");
//对于 聊天室保活成功返回的code是0 更改统一返回200
if (path.contains("keepalive") && "0".equals(code)) {
text = StringUtils.replace(text, "chatroomIds", "chatrooms");
text = StringUtils.replace(text, "0", "200");
}
}
return text;
}
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
private static UserModel[] parseUserList(UserList userList) {
ArrayList users = new ArrayList<>();
for (String id : userList.getUsers()) {
users.add(new UserModel().setId(id));
}
UserModel[] members = users.toArray(new UserModel[users.size()]);
return members;
}
public static String getSDKVersion() {
if (null == sdkVersion) {
Properties properties = new Properties();
try {
properties.load(CommonUtil.class.getClassLoader().getResourceAsStream("app.properties"));
if (!properties.isEmpty()) {
sdkVersion = properties.getProperty("app.version");
}
} catch (IOException e) {
e.printStackTrace();
}
}
return sdkVersion;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy