From 4b7e86de8529e2e127ace1481e40bdd2d4d98709 Mon Sep 17 00:00:00 2001
From: yexuejc <1107047387@qq.com>
Date: Sat, 12 May 2018 22:36:03 +0800
Subject: [PATCH] 1.0.1
---
README.md | 16 +-
UPDATE.md | 16 +
WIKI.md | 9 +
pom.xml | 10 +-
.../java/com/yexuejc/base/http/Resps.java | 12 +
.../java/com/yexuejc/base/pojo/BaseVO.java | 1 +
.../java/com/yexuejc/base/pojo/PagerVO.java | 49 +++
.../java/com/yexuejc/base/pojo/ParamsPO.java | 45 +++
.../java/com/yexuejc/base/util/StrUtil.java | 340 +++++++++++++-----
9 files changed, 398 insertions(+), 100 deletions(-)
create mode 100644 UPDATE.md
create mode 100644 WIKI.md
create mode 100644 src/main/java/com/yexuejc/base/pojo/PagerVO.java
create mode 100644 src/main/java/com/yexuejc/base/pojo/ParamsPO.java
diff --git a/README.md b/README.md
index 81fe728..92d3928 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,13 @@
通用工具包
+###说明
+>1. 支持环境:java8
+>2. 该工具包基于springboot提取,按理说适用于所有java工程
+>3. 其中依赖jjwt、validation-api,但不传递依赖
+
+
### 使用
->yexuejc.base.version=1.0.0
+>yexuejc.base.version=1.0.1
pom.xml
```
@@ -18,4 +24,10 @@ pom.xml
https://jitpack.io
-```
\ No newline at end of file
+```
+
+### 工具文档
+[Wiki](WIKI.md)
+
+### 更新日志
+[更新记录](UPDATE.md)
\ No newline at end of file
diff --git a/UPDATE.md b/UPDATE.md
new file mode 100644
index 0000000..359a4f4
--- /dev/null
+++ b/UPDATE.md
@@ -0,0 +1,16 @@
+yexuejc-base 更新记录
+------------------
+
+#### version :1.0.1
+**time:** 2018-5-12 22:25:05
+**branch:** master
+**update:**
+>1.添加支持加密功能
+#
+
+#### version :1.0.0
+**time:** 2018-1-31 12:16:10
+**branch:** master
+**update:**
+>1.基于java8开发的web应用工具包
+#
\ No newline at end of file
diff --git a/WIKI.md b/WIKI.md
new file mode 100644
index 0000000..7894877
--- /dev/null
+++ b/WIKI.md
@@ -0,0 +1,9 @@
+yexuejc-base 文档
+------------------
+
+##### 1. RespsConsts 网络请求统一返回 常量
+##### 2. Resps 网络请求统一返回类
+##### 3. ApiVO 接口交互API
+##### 4. BaseVO 基类VO
+
+待完善......
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index c46e416..f67620c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.yexuejc.base
yexuejc-base
- 1.0.0
+ 1.0.1
${project.artifactId}
@@ -20,6 +20,7 @@
0.7.0
true
1.8
+ 1.1.0.Final
@@ -30,6 +31,13 @@
${jjwt.version}
true
+
+
+ javax.validation
+ validation-api
+ ${validation-api.version}
+ true
+
diff --git a/src/main/java/com/yexuejc/base/http/Resps.java b/src/main/java/com/yexuejc/base/http/Resps.java
index 07e4a3f..49d9e95 100644
--- a/src/main/java/com/yexuejc/base/http/Resps.java
+++ b/src/main/java/com/yexuejc/base/http/Resps.java
@@ -20,6 +20,10 @@ public class Resps implements Serializable {
* 状态
*/
private String code;
+ /**
+ * md5码
+ */
+ private String sign;
/**
* 内容
*/
@@ -133,6 +137,14 @@ public class Resps implements Serializable {
this.msg = msg;
}
+ public String getSign() {
+ return sign;
+ }
+
+ public void setSign(String sign) {
+ this.sign = sign;
+ }
+
@Override
public String toString() {
return JsonUtil.obj2Json(this);
diff --git a/src/main/java/com/yexuejc/base/pojo/BaseVO.java b/src/main/java/com/yexuejc/base/pojo/BaseVO.java
index c57e0cc..df49887 100644
--- a/src/main/java/com/yexuejc/base/pojo/BaseVO.java
+++ b/src/main/java/com/yexuejc/base/pojo/BaseVO.java
@@ -5,6 +5,7 @@ import com.yexuejc.base.util.JsonUtil;
import java.io.Serializable;
/**
+ * 基类VO
* @PackageName: com.yexuejc.util.base.pojo
* @Description:
* @author: maxf
diff --git a/src/main/java/com/yexuejc/base/pojo/PagerVO.java b/src/main/java/com/yexuejc/base/pojo/PagerVO.java
new file mode 100644
index 0000000..3e20341
--- /dev/null
+++ b/src/main/java/com/yexuejc/base/pojo/PagerVO.java
@@ -0,0 +1,49 @@
+package com.yexuejc.base.pojo;
+
+import com.yexuejc.base.util.JsonUtil;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 分页 VO
+ *
+ * @author: maxf
+ * @date: 2018/3/28 14:23
+ */
+public class PagerVO extends BaseVO {
+
+ private static final long serialVersionUID = 3490440129554644587L;
+
+ @NotNull
+ @Min(1L)
+ private Integer page = 1;
+ @NotNull
+ @Min(1L)
+ private Integer size = 20;
+
+ public int getOffset() {
+ return (this.page - 1) * this.size;
+ }
+
+ @Override
+ public String toString() {
+ return JsonUtil.obj2Json(this);
+ }
+
+ public Integer getPage() {
+ return page;
+ }
+
+ public void setPage(Integer page) {
+ this.page = page;
+ }
+
+ public Integer getSize() {
+ return size;
+ }
+
+ public void setSize(Integer size) {
+ this.size = size;
+ }
+}
diff --git a/src/main/java/com/yexuejc/base/pojo/ParamsPO.java b/src/main/java/com/yexuejc/base/pojo/ParamsPO.java
new file mode 100644
index 0000000..8fea4e9
--- /dev/null
+++ b/src/main/java/com/yexuejc/base/pojo/ParamsPO.java
@@ -0,0 +1,45 @@
+package com.yexuejc.base.pojo;
+
+import com.yexuejc.base.util.JsonUtil;
+
+import java.io.Serializable;
+
+/**
+ * 解密前的请求参数格式
+ *
+ * @author: maxf
+ * @date: 2018/5/12 14:52
+ */
+public class ParamsPO implements Serializable {
+ private static final long serialVersionUID = 9171765814642105098L;
+
+ /**
+ * 参数
+ */
+ private String data;
+ /**
+ * md5
+ */
+ private String sign;
+
+ @Override
+ public String toString() {
+ return JsonUtil.obj2Json(this);
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getSign() {
+ return sign;
+ }
+
+ public void setSign(String sign) {
+ this.sign = sign;
+ }
+}
diff --git a/src/main/java/com/yexuejc/base/util/StrUtil.java b/src/main/java/com/yexuejc/base/util/StrUtil.java
index f556b4b..84caefc 100644
--- a/src/main/java/com/yexuejc/base/util/StrUtil.java
+++ b/src/main/java/com/yexuejc/base/util/StrUtil.java
@@ -3,37 +3,52 @@ package com.yexuejc.base.util;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import static java.util.regex.Pattern.compile;
-
/**
- * @PackageName: com.yexuejc.util.base.util
+ * 字符串工具类
+ *
+ * @ClassName: StrUtil
* @Description:
* @author: maxf
- * @date: 2017/12/28 17:34
+ * @date: 2018/5/12 19:13
*/
public final class StrUtil {
- public static char[] HEX_CHAR = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd',
- 'e', 'f'};
-
- private StrUtil() {
- }
+ public static char[] HEX_CHAR = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+ /**
+ * 判断字符串,数组,集合 是否为空
+ *
+ * @param obj
+ * @return
+ */
public static boolean isEmpty(Object obj) {
if (obj instanceof String) {
- return obj == null || "".equals((String) obj);
+ if (obj == null || "".equals((String) obj)) {
+ return true;
+ } else {
+ return false;
+ }
} else if (obj instanceof Object[]) {
- return obj == null || ((Object[]) ((Object[]) obj)).length == 0;
- } else if (obj instanceof Collection) {
- return obj == null || ((Collection) obj).size() == 0;
+ if (obj == null || ((Object[]) obj).length == 0) {
+ return true;
+ } else {
+ return false;
+ }
+ } else if (obj instanceof Collection>) {
+ if (obj == null || ((Collection>) obj).size() == 0) {
+ return true;
+ } else {
+ return false;
+ }
} else {
- return obj == null;
+ if (obj == null) {
+ return true;
+ } else {
+ return false;
+ }
}
}
@@ -41,10 +56,23 @@ public final class StrUtil {
return !isEmpty(obj);
}
+ /**
+ * 生成UUID
+ *
+ * @return
+ */
public static String genUUID() {
return UUID.randomUUID().toString().replaceAll("-", "");
}
+ /**
+ * 生成11位编号,可以用作订单号,有很小几率出现重复,需要做异常处理
+ * 左边第一位为正负标识:正数1 负数0
+ * 剩余位数为UUID的hashcode值
+ * 可以再生成的编号基础上嵌入其他标识编码
+ *
+ * @return
+ */
public static String genNum() {
int hashCode = UUID.randomUUID().toString().hashCode();
StringBuffer num = new StringBuffer();
@@ -54,131 +82,215 @@ public final class StrUtil {
} else {
num.append("1");
}
-
return num.append(String.format("%010d", hashCode)).toString().substring(0, 8);
}
+ /**
+ * 解析aa=bb&cc=dd&ee=ff格式的字符串,返回HashMap
+ *
+ * @param urlencoded
+ * @return
+ */
public static Map parseUrlencoded(String urlencoded) {
if (isEmpty(urlencoded)) {
return null;
- } else {
- String[] entrys = urlencoded.split("&");
- if (isEmpty(entrys)) {
- return null;
+ }
+ String[] entrys = urlencoded.split("&");
+ if (isEmpty(entrys)) {
+ return null;
+ }
+
+ Map map = new HashMap();
+ String[] kv = null;
+ for (String entry : entrys) {
+ if (isEmpty(entry)) {
+ continue;
+ }
+ kv = entry.split("=");
+ if (isEmpty(kv)) {
+ continue;
+ }
+ if (kv.length > 1) {
+ map.put(kv[0], kv[1]);
} else {
- Map map = new HashMap();
- String[] kv = null;
- String[] var4 = entrys;
- int var5 = entrys.length;
-
- for (int var6 = 0; var6 < var5; ++var6) {
- String entry = var4[var6];
- if (!isEmpty(entry)) {
- kv = entry.split("=");
- if (!isEmpty(kv)) {
- if (kv.length > 1) {
- map.put(kv[0], kv[1]);
- } else {
- map.put(kv[0], null);
- }
- }
- }
- }
-
- return map;
+ map.put(kv[0], null);
}
}
+ return map;
}
- public static String toHex(byte[] buf) {
+ /**
+ * 字符串转换方法 把字节数组转换成16进制字符串
+ *
+ * @param buf 初始字节数组
+ * @return 转换后字符串
+ */
+ public static String toHex(byte buf[]) {
StringBuffer strbuf = new StringBuffer(buf.length * 2);
-
- for (int i = 0; i < buf.length; ++i) {
- if ((buf[i] & 255) < 16) {
+ int i;
+ for (i = 0; i < buf.length; i++) {
+ if (((int) buf[i] & 0xff) < 0x10) {
strbuf.append("0");
}
-
- strbuf.append(Long.toString((long) (buf[i] & 255), 16));
+ strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
}
-
return strbuf.toString();
}
+ /**
+ * 获取字符串的MD5码
+ *
+ * @param str
+ * @return
+ */
public static String toMD5(String str) {
if (str == null) {
return null;
- } else {
- MessageDigest md = null;
-
- try {
- md = MessageDigest.getInstance("MD5");
- } catch (NoSuchAlgorithmException var3) {
- var3.printStackTrace();
- return null;
- }
-
- md.update(str.getBytes());
- byte[] tmp = md.digest();
- return toHex(tmp);
}
+ MessageDigest md = null;
+ try {
+ md = java.security.MessageDigest.getInstance("MD5");
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ return null;
+ }
+ md.update(str.getBytes());
+ byte tmp[] = md.digest();
+ return toHex(tmp);
}
+ /**
+ * SHA256加密
+ *
+ * @param str
+ * @return
+ */
+ public static String toSHA256(final String str) {
+ return toSHA(str, "SHA-256");
+ }
+
+ /**
+ * SHA加密
+ *
+ * @param str
+ * @param key
+ * @return
+ */
+ public static String toSHA(final String str, final String key) {
+ // 是否是有效字符串
+ if (str == null) {
+ return null;
+ }
+ MessageDigest messageDigest = null;
+ try {
+ messageDigest = MessageDigest.getInstance(key);
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ return null;
+ }
+ messageDigest.update(str.getBytes());
+ byte tmp[] = messageDigest.digest();
+ return toHex(tmp);
+ }
+
+ /**
+ * 用ISO-8859-1解码 再用UFT-8编码
+ *
+ * @param str
+ * @return
+ */
public static String iso2utf(String str) {
String utfStr = null;
-
try {
utfStr = new String(str.getBytes("ISO-8859-1"), "utf-8");
- } catch (UnsupportedEncodingException var3) {
- var3.printStackTrace();
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
}
-
return utfStr;
}
+ /**
+ * 判断字符串是否是数字
+ *
+ * @param str
+ * @return
+ */
public static boolean isNumeric(String str) {
- Pattern pattern = compile("[0-9]*");
+ Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
- return isNum.matches();
+ if (!isNum.matches()) {
+ return false;
+ }
+ return true;
}
+ /**
+ * 对ID(32位)进行编码
+ *
+ * @param id
+ * @return
+ */
public static String codeId(String id) {
- if (id != null && id.length() == 32) {
- StringBuilder coded = new StringBuilder();
-
- int i;
- for (i = 0; i < 13; ++i) {
- coded.append(HEX_CHAR[(int) (Math.random() * 15.0D) + 1]);
- }
-
- coded.append(id.substring(0, 11));
-
- for (i = 0; i < 7; ++i) {
- coded.append(HEX_CHAR[(int) (Math.random() * 15.0D) + 1]);
- }
-
- coded.append(id.substring(11));
-
- for (i = 0; i < 12; ++i) {
- coded.append(HEX_CHAR[(int) (Math.random() * 15.0D) + 1]);
- }
-
- return coded.toString();
- } else {
+ if (id == null || id.length() != 32) {
return id;
}
+
+ StringBuilder coded = new StringBuilder();
+ for (int i = 0; i < 13; i++) {
+ coded.append(HEX_CHAR[(int) (Math.random() * 15L) + 1]);
+ }
+ coded.append(id.substring(0, 11));
+ for (int i = 0; i < 7; i++) {
+ coded.append(HEX_CHAR[(int) (Math.random() * 15L) + 1]);
+ }
+ coded.append(id.substring(11));
+ for (int i = 0; i < 12; i++) {
+ coded.append(HEX_CHAR[(int) (Math.random() * 15L) + 1]);
+ }
+
+ return coded.toString();
}
+ /**
+ * 对ID(32位)进行解码
+ *
+ * @param coded
+ * @return
+ */
public static String decodeId(String coded) {
- if (coded != null && coded.length() == 64) {
- StringBuilder id = new StringBuilder();
- id.append(coded.substring(13, 24));
- id.append(coded.substring(31, 52));
- return id.toString();
- } else {
+ if (coded == null || coded.length() != 64) {
return coded;
}
+
+ StringBuilder id = new StringBuilder();
+ id.append(coded.substring(13, 24));
+ id.append(coded.substring(31, 52));
+
+ return id.toString();
}
+ /**
+ * map parameters 转url parameters
+ *
+ * @param sortedParams
+ * @return
+ */
+ public static String getSignContent(Map sortedParams) {
+ StringBuffer content = new StringBuffer();
+ List keys = new ArrayList<>(sortedParams.keySet());
+ Collections.sort(keys);
+ int index = 0;
+
+ for (int i = 0; i < keys.size(); ++i) {
+ String key = keys.get(i);
+ Object value = sortedParams.get(key);
+ if (isNotEmpty(key) && isNotEmpty(value)) {
+ content.append((index == 0 ? "" : "&") + key + "=" + value);
+ ++index;
+ }
+ }
+ return content.toString();
+ }
/**
* 替换手机号中间4位为*
@@ -192,4 +304,38 @@ public final class StrUtil {
public static String replaceMobile(String mobile) {
return mobile.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
}
+
+ /**
+ * map 排序
+ *
+ * @param sortedParams
+ * @return
+ */
+ public static Map mapSort(Map sortedParams) {
+ Map map = new HashMap<>();
+ List keys = new ArrayList<>(sortedParams.keySet());
+ Collections.sort(keys);
+ int index = 0;
+ for (int i = 0; i < keys.size(); ++i) {
+ String key = keys.get(i);
+ Object value = sortedParams.get(key);
+ map.put(key, value);
+ ++index;
+ }
+ return map;
+ }
+
+ /**
+ * 设置Str带默认值
+ *
+ * @param msg
+ * @param defMsg
+ * @return
+ */
+ public static String setStr(String msg, String defMsg) {
+ if (StrUtil.isEmpty(msg)) {
+ return defMsg;
+ }
+ return msg;
+ }
}