|
@@ -22,8 +22,8 @@ import com.fasterxml.jackson.core.JsonProcessingException;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
|
|
/**
|
|
/**
|
|
- * Map< String, Object> 是最常用的一种Map类型,但是它写着麻烦
|
|
|
|
- * <p>所以特封装此类,继承Map,进行一些扩展,可以让Map更灵活使用
|
|
|
|
|
|
+ * Map< String, Object> 是最常用的一种Map类型,但是它写着麻烦
|
|
|
|
+ * <p>所以特封装此类,继承Map,进行一些扩展,可以让Map更灵活使用
|
|
* <p>最新:2020-12-10 新增部分构造方法
|
|
* <p>最新:2020-12-10 新增部分构造方法
|
|
* @author kong
|
|
* @author kong
|
|
*/
|
|
*/
|
|
@@ -33,13 +33,13 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
|
|
|
|
public SoMap() {
|
|
public SoMap() {
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
|
|
|
|
/** 以下元素会在isNull函数中被判定为Null, */
|
|
/** 以下元素会在isNull函数中被判定为Null, */
|
|
public static final Object[] NULL_ELEMENT_ARRAY = {null, ""};
|
|
public static final Object[] NULL_ELEMENT_ARRAY = {null, ""};
|
|
public static final List<Object> NULL_ELEMENT_LIST;
|
|
public static final List<Object> NULL_ELEMENT_LIST;
|
|
|
|
|
|
-
|
|
|
|
|
|
+
|
|
static {
|
|
static {
|
|
NULL_ELEMENT_LIST = Arrays.asList(NULL_ELEMENT_ARRAY);
|
|
NULL_ELEMENT_LIST = Arrays.asList(NULL_ELEMENT_ARRAY);
|
|
}
|
|
}
|
|
@@ -63,7 +63,7 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
}
|
|
}
|
|
return value;
|
|
return value;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
/** 转为String并返回 */
|
|
/** 转为String并返回 */
|
|
public String getString(String key) {
|
|
public String getString(String key) {
|
|
Object value = get(key);
|
|
Object value = get(key);
|
|
@@ -201,20 +201,20 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
throw new RuntimeException(e);
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
/** 从map中取值,塞到一个对象中 */
|
|
/** 从map中取值,塞到一个对象中 */
|
|
public <T> T getModelByObject(T obj) {
|
|
public <T> T getModelByObject(T obj) {
|
|
- // 获取类型
|
|
|
|
|
|
+ // 获取类型
|
|
Class<?> cs = obj.getClass();
|
|
Class<?> cs = obj.getClass();
|
|
- // 循环复制
|
|
|
|
|
|
+ // 循环复制
|
|
for (Field field : cs.getDeclaredFields()) {
|
|
for (Field field : cs.getDeclaredFields()) {
|
|
try {
|
|
try {
|
|
- // 获取对象
|
|
|
|
- Object value = this.get(field.getName());
|
|
|
|
|
|
+ // 获取对象
|
|
|
|
+ Object value = this.get(field.getName());
|
|
if(value == null) {
|
|
if(value == null) {
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
- field.setAccessible(true);
|
|
|
|
|
|
+ field.setAccessible(true);
|
|
Object valueConvert = getValueByClass(value, field.getType());
|
|
Object valueConvert = getValueByClass(value, field.getType());
|
|
field.set(obj, valueConvert);
|
|
field.set(obj, valueConvert);
|
|
} catch (IllegalArgumentException | IllegalAccessException e) {
|
|
} catch (IllegalArgumentException | IllegalAccessException e) {
|
|
@@ -224,7 +224,7 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
return obj;
|
|
return obj;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
|
|
/**
|
|
/**
|
|
* 将指定值转化为指定类型并返回
|
|
* 将指定值转化为指定类型并返回
|
|
@@ -259,7 +259,7 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
return (T)obj3;
|
|
return (T)obj3;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
|
|
+
|
|
// ============================= 写值 =============================
|
|
// ============================= 写值 =============================
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -273,8 +273,8 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
|
|
|
|
/** set一个值,连缀风格 */
|
|
/** set一个值,连缀风格 */
|
|
public SoMap set(String key, Object value) {
|
|
public SoMap set(String key, Object value) {
|
|
- // 防止敏感key
|
|
|
|
- if(key.toLowerCase().equals("this")) {
|
|
|
|
|
|
+ // 防止敏感key
|
|
|
|
+ if(key.toLowerCase().equals("this")) {
|
|
return this;
|
|
return this;
|
|
}
|
|
}
|
|
put(key, value);
|
|
put(key, value);
|
|
@@ -322,7 +322,7 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
|
|
+
|
|
// ============================= 删值 =============================
|
|
// ============================= 删值 =============================
|
|
|
|
|
|
/** delete一个值,连缀风格 */
|
|
/** delete一个值,连缀风格 */
|
|
@@ -376,9 +376,9 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
clear();
|
|
clear();
|
|
return this;
|
|
return this;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
|
|
- // ============================= 快速构建 =============================
|
|
|
|
|
|
+
|
|
|
|
+ // ============================= 快速构建 =============================
|
|
|
|
|
|
/** 构建一个SoMap并返回 */
|
|
/** 构建一个SoMap并返回 */
|
|
public static SoMap getSoMap() {
|
|
public static SoMap getSoMap() {
|
|
@@ -397,7 +397,7 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
public static SoMap getSoMapByModel(Object model) {
|
|
public static SoMap getSoMapByModel(Object model) {
|
|
return SoMap.getSoMap().setModel(model);
|
|
return SoMap.getSoMap().setModel(model);
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
/** 将一个对象集合解析成为SoMap集合 */
|
|
/** 将一个对象集合解析成为SoMap集合 */
|
|
public static List<SoMap> getSoMapByList(List<?> list) {
|
|
public static List<SoMap> getSoMapByList(List<?> list) {
|
|
List<SoMap> listMap = new ArrayList<SoMap>();
|
|
List<SoMap> listMap = new ArrayList<SoMap>();
|
|
@@ -406,7 +406,7 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
}
|
|
}
|
|
return listMap;
|
|
return listMap;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
/** 克隆指定key,返回一个新的SoMap */
|
|
/** 克隆指定key,返回一个新的SoMap */
|
|
public SoMap cloneKeys(String... keys) {
|
|
public SoMap cloneKeys(String... keys) {
|
|
SoMap so = new SoMap();
|
|
SoMap so = new SoMap();
|
|
@@ -469,10 +469,10 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
this.clearAll().setMap(so);
|
|
this.clearAll().setMap(so);
|
|
return this;
|
|
return this;
|
|
}
|
|
}
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
// ============================= 辅助方法 =============================
|
|
// ============================= 辅助方法 =============================
|
|
|
|
|
|
|
|
|
|
@@ -490,7 +490,7 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
}
|
|
}
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
/** 与isNull()相反 */
|
|
/** 与isNull()相反 */
|
|
public boolean isNotNull(String key) {
|
|
public boolean isNotNull(String key) {
|
|
return !isNull(key);
|
|
return !isNull(key);
|
|
@@ -499,12 +499,12 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
public boolean has(String key) {
|
|
public boolean has(String key) {
|
|
return !isNull(key);
|
|
return !isNull(key);
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
/** 指定value在此SoMap的判断标准中是否为null */
|
|
/** 指定value在此SoMap的判断标准中是否为null */
|
|
public boolean valueIsNull(Object value) {
|
|
public boolean valueIsNull(Object value) {
|
|
return NULL_ELEMENT_LIST.contains(value);
|
|
return NULL_ELEMENT_LIST.contains(value);
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
/** 验证指定key不为空,为空则抛出异常 */
|
|
/** 验证指定key不为空,为空则抛出异常 */
|
|
public SoMap checkNull(String ...keys) {
|
|
public SoMap checkNull(String ...keys) {
|
|
for (String key : keys) {
|
|
for (String key : keys) {
|
|
@@ -522,12 +522,12 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
if(value == null) {
|
|
if(value == null) {
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
- return patternNumber.matcher(value).matches();
|
|
|
|
|
|
+ return patternNumber.matcher(value).matches();
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 转为JSON字符串
|
|
* 转为JSON字符串
|
|
*/
|
|
*/
|
|
@@ -541,11 +541,11 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 转为JSON字符串, 带格式的
|
|
|
|
|
|
+ * 转为JSON字符串, 带格式的
|
|
*/
|
|
*/
|
|
public String toJsonFormatString() {
|
|
public String toJsonFormatString() {
|
|
try {
|
|
try {
|
|
- return JSON.toJSONString(this, true);
|
|
|
|
|
|
+ return JSON.toJSONString(this, true);
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
throw new RuntimeException(e);
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
@@ -555,17 +555,17 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 返回当前request请求的的所有参数
|
|
|
|
|
|
+ * 返回当前request请求的的所有参数
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
public static SoMap getRequestSoMap() {
|
|
public static SoMap getRequestSoMap() {
|
|
- // 大善人SpringMVC提供的封装
|
|
|
|
|
|
+ // 大善人SpringMVC提供的封装
|
|
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
|
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
|
if(servletRequestAttributes == null) {
|
|
if(servletRequestAttributes == null) {
|
|
throw new RuntimeException("当前线程非JavaWeb环境");
|
|
throw new RuntimeException("当前线程非JavaWeb环境");
|
|
}
|
|
}
|
|
// 当前request
|
|
// 当前request
|
|
- HttpServletRequest request = servletRequestAttributes.getRequest();
|
|
|
|
|
|
+ HttpServletRequest request = servletRequestAttributes.getRequest();
|
|
if (request.getAttribute("currentSoMap") == null || request.getAttribute("currentSoMap") instanceof SoMap == false ) {
|
|
if (request.getAttribute("currentSoMap") == null || request.getAttribute("currentSoMap") instanceof SoMap == false ) {
|
|
initRequestSoMap(request);
|
|
initRequestSoMap(request);
|
|
}
|
|
}
|
|
@@ -575,10 +575,10 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
/** 初始化当前request的 SoMap */
|
|
/** 初始化当前request的 SoMap */
|
|
private static void initRequestSoMap(HttpServletRequest request) {
|
|
private static void initRequestSoMap(HttpServletRequest request) {
|
|
SoMap soMap = new SoMap();
|
|
SoMap soMap = new SoMap();
|
|
- Map<String, String[]> parameterMap = request.getParameterMap(); // 获取所有参数
|
|
|
|
|
|
+ Map<String, String[]> parameterMap = request.getParameterMap(); // 获取所有参数
|
|
for (String key : parameterMap.keySet()) {
|
|
for (String key : parameterMap.keySet()) {
|
|
try {
|
|
try {
|
|
- String[] values = parameterMap.get(key); // 获得values
|
|
|
|
|
|
+ String[] values = parameterMap.get(key); // 获得values
|
|
if(values.length == 1) {
|
|
if(values.length == 1) {
|
|
soMap.set(key, values[0]);
|
|
soMap.set(key, values[0]);
|
|
} else {
|
|
} else {
|
|
@@ -594,19 +594,19 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
}
|
|
}
|
|
request.setAttribute("currentSoMap", soMap);
|
|
request.setAttribute("currentSoMap", soMap);
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
/**
|
|
/**
|
|
- * 验证返回当前线程是否为JavaWeb环境
|
|
|
|
|
|
+ * 验证返回当前线程是否为JavaWeb环境
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
public static boolean isJavaWeb() {
|
|
public static boolean isJavaWeb() {
|
|
- ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();// 大善人SpringMVC提供的封装
|
|
|
|
|
|
+ ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();// 大善人SpringMVC提供的封装
|
|
if(servletRequestAttributes == null) {
|
|
if(servletRequestAttributes == null) {
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
// ============================= 常见key (以下key经常用,所以封装以下,方便写代码) =============================
|
|
// ============================= 常见key (以下key经常用,所以封装以下,方便写代码) =============================
|
|
@@ -643,6 +643,9 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
private com.github.pagehelper.Page<?> pagePlug;
|
|
private com.github.pagehelper.Page<?> pagePlug;
|
|
/** 分页插件 - 开始分页 */
|
|
/** 分页插件 - 开始分页 */
|
|
public SoMap startPage() {
|
|
public SoMap startPage() {
|
|
|
|
+ if(get("orderBy")!=null){
|
|
|
|
+ com.github.pagehelper.PageHelper.orderBy(get("orderBy").toString());
|
|
|
|
+ }
|
|
this.pagePlug= com.github.pagehelper.PageHelper.startPage(getKeyPageNo(), getKeyPageSize());
|
|
this.pagePlug= com.github.pagehelper.PageHelper.startPage(getKeyPageNo(), getKeyPageSize());
|
|
return this;
|
|
return this;
|
|
}
|
|
}
|
|
@@ -659,27 +662,27 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
return getDataCount();
|
|
return getDataCount();
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
// ============================= 工具方法 =============================
|
|
// ============================= 工具方法 =============================
|
|
-
|
|
|
|
|
|
+
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 将一个一维集合转换为树形集合
|
|
|
|
|
|
+ * 将一个一维集合转换为树形集合
|
|
* @param list 集合
|
|
* @param list 集合
|
|
* @param idKey id标识key
|
|
* @param idKey id标识key
|
|
* @param parentIdKey 父id标识key
|
|
* @param parentIdKey 父id标识key
|
|
* @param childListKey 子节点标识key
|
|
* @param childListKey 子节点标识key
|
|
- * @return 转换后的tree集合
|
|
|
|
|
|
+ * @return 转换后的tree集合
|
|
*/
|
|
*/
|
|
public static List<SoMap> listToTree(List<SoMap> list, String idKey, String parentIdKey, String childListKey) {
|
|
public static List<SoMap> listToTree(List<SoMap> list, String idKey, String parentIdKey, String childListKey) {
|
|
- // 声明新的集合,存储tree形数据
|
|
|
|
|
|
+ // 声明新的集合,存储tree形数据
|
|
List<SoMap> newTreeList = new ArrayList<SoMap>();
|
|
List<SoMap> newTreeList = new ArrayList<SoMap>();
|
|
- // 声明hash-Map,方便查找数据
|
|
|
|
|
|
+ // 声明hash-Map,方便查找数据
|
|
SoMap hash = new SoMap();
|
|
SoMap hash = new SoMap();
|
|
- // 将数组转为Object的形式,key为数组中的id
|
|
|
|
|
|
+ // 将数组转为Object的形式,key为数组中的id
|
|
for (int i = 0; i < list.size(); i++) {
|
|
for (int i = 0; i < list.size(); i++) {
|
|
SoMap json = (SoMap) list.get(i);
|
|
SoMap json = (SoMap) list.get(i);
|
|
hash.put(json.getString(idKey), json);
|
|
hash.put(json.getString(idKey), json);
|
|
@@ -692,7 +695,7 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
SoMap hashVp = (SoMap) hash.get(aVal.get(parentIdKey, "").toString());
|
|
SoMap hashVp = (SoMap) hash.get(aVal.get(parentIdKey, "").toString());
|
|
// 如果记录的pid存在,则说明它有父节点,将她添加到孩子节点的集合中
|
|
// 如果记录的pid存在,则说明它有父节点,将她添加到孩子节点的集合中
|
|
if (hashVp != null) {
|
|
if (hashVp != null) {
|
|
- // 检查是否有child属性,有则添加,没有则新建
|
|
|
|
|
|
+ // 检查是否有child属性,有则添加,没有则新建
|
|
if (hashVp.get(childListKey) != null) {
|
|
if (hashVp.get(childListKey) != null) {
|
|
@SuppressWarnings("unchecked")
|
|
@SuppressWarnings("unchecked")
|
|
List<SoMap> ch = (List<SoMap>) hashVp.get(childListKey);
|
|
List<SoMap> ch = (List<SoMap>) hashVp.get(childListKey);
|
|
@@ -709,8 +712,8 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
}
|
|
}
|
|
return newTreeList;
|
|
return newTreeList;
|
|
}
|
|
}
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
/** 指定字符串的字符串下划线转大写模式 */
|
|
/** 指定字符串的字符串下划线转大写模式 */
|
|
private static String wordEachBig(String str){
|
|
private static String wordEachBig(String str){
|
|
@@ -744,6 +747,6 @@ public class SoMap extends LinkedHashMap<String, Object> {
|
|
private static String wordHumpToLine(String str) {
|
|
private static String wordHumpToLine(String str) {
|
|
return str.replaceAll("[A-Z]", "_$0").toLowerCase();
|
|
return str.replaceAll("[A-Z]", "_$0").toLowerCase();
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
|
|
|
|
}
|
|
}
|