(2);
keyPairMap.put("publicKey", publicKeyStr);
keyPairMap.put("privateKey", privateKeyStr);
-
return keyPairMap;
}
-
/**
* 得到公钥
*
@@ -203,7 +197,6 @@ public class RSA {
}
}
-
/**
* 私钥加密
*
@@ -310,9 +303,7 @@ public class RSA {
private static Signature signature;
-
/**
- * /**
* 私钥签名:默认算法SHA1withRSA
*
* 签名算法 {@link SignAlgorithm}
diff --git a/src/main/java/com/yexuejc/base/encrypt/RSA2.java b/src/main/java/com/yexuejc/base/encrypt/RSA2.java
index 2e86afd..68e7099 100644
--- a/src/main/java/com/yexuejc/base/encrypt/RSA2.java
+++ b/src/main/java/com/yexuejc/base/encrypt/RSA2.java
@@ -2,14 +2,8 @@ package com.yexuejc.base.encrypt;
import com.yexuejc.base.util.StrUtil;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.UnrecoverableKeyException;
+import java.io.*;
+import java.security.*;
import java.security.cert.Certificate;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
@@ -192,4 +186,122 @@ public class RSA2 {
return (RSAPrivateKey) ks.getKey(alias, password.toCharArray());
}
+ /**
+ * 证书格式转换 JKS(xx.keystore) 转 PKCS12(xx.pfx)
+ *
+ * @param inPath 证书输入文件路径
+ * @param outPath 证书输出文件路径
+ * @param oPwd 原证书密码
+ * @param nPwd 新证书密码(为空同原证书密码一致)
+ */
+ public static void cover2Pfx(String inPath, String outPath, String oPwd, String nPwd) {
+ try {
+ FileInputStream fis = new FileInputStream(inPath);
+ FileOutputStream out = new FileOutputStream(outPath);
+ if (nPwd == null) {
+ nPwd = oPwd;
+ }
+ cover2Pfx(fis, out, oPwd.toCharArray(), nPwd.toCharArray());
+ out.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 证书格式转换 JKS(xx.keystore) 转 PKCS12(xx.pfx)
+ *
+ * @param fis 证书输入文件流
+ * @param out 证书输出文件流[自行关闭->out.close()]
+ * @param oPwd 原证书密码
+ * @param nPwd 新证书密码(为空同原证书密码一致)
+ */
+ public static void cover2Pfx(FileInputStream fis, FileOutputStream out, char[] oPwd, char[] nPwd) {
+ try {
+ KeyStore inputKeyStore = KeyStore.getInstance("JKS");
+ cover(fis, out, oPwd, nPwd, inputKeyStore, "PKCS12");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 证书格式转换 PKCS12(xx.pfx) 转 JKS(xx.keystore)
+ *
+ * @param inPath 证书输入文件路径
+ * @param outPath 证书输出文件路径
+ * @param oPwd 原证书密码
+ * @param nPwd 新证书密码(为空同原证书密码一致)
+ */
+ public static void cover2keyStore(String inPath, String outPath, String oPwd, String nPwd) {
+ try {
+ FileInputStream fis = new FileInputStream(inPath);
+ FileOutputStream out = new FileOutputStream(outPath);
+ if (nPwd == null) {
+ nPwd = oPwd;
+ }
+ cover2keyStore(fis, out, oPwd.toCharArray(), nPwd.toCharArray());
+ out.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ /**
+ * 证书格式转换 PKCS12(xx.pfx) 转 JKS(xx.keystore)
+ *
+ * @param fis 证书输入文件流
+ * @param out 证书输出文件流[自行关闭->out.close()]
+ * @param oPwd 原证书密码
+ * @param nPwd 新证书密码(为空同原证书密码一致)
+ */
+ public static void cover2keyStore(FileInputStream fis, FileOutputStream out, char[] oPwd, char[] nPwd) {
+ try {
+ KeyStore inputKeyStore = KeyStore.getInstance("PKCS12");
+ cover(fis, out, oPwd, nPwd, inputKeyStore, "JKS");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 证书转换操作
+ *
+ * @param fis 证书输入文件流
+ * @param out 证书输出文件流[自行关闭->out.close()]
+ * @param oPwd 原证书密码
+ * @param nPwd 新证书密码(为空同原证书密码一致)
+ * @param inputKeyStore 输入格式
+ * @param type 目标类型
+ * @throws IOException
+ * @throws NoSuchAlgorithmException
+ * @throws CertificateException
+ * @throws KeyStoreException
+ * @throws UnrecoverableKeyException
+ */
+ public static void cover(FileInputStream fis, FileOutputStream out, char[] oPwd, char[] nPwd, KeyStore inputKeyStore, String type) throws IOException, NoSuchAlgorithmException, CertificateException, KeyStoreException, UnrecoverableKeyException {
+ inputKeyStore.load(fis, oPwd);
+ fis.close();
+ if (nPwd == null) {
+ nPwd = oPwd;
+ }
+ KeyStore outputKeyStore = KeyStore.getInstance(type);
+ outputKeyStore.load(null, nPwd);
+ Enumeration enums = inputKeyStore.aliases();
+ while (enums.hasMoreElements()) {
+ String keyAlias = enums.nextElement();
+ System.out.println("alias=[" + keyAlias + "]");
+ if (inputKeyStore.isKeyEntry(keyAlias)) {
+ Key key = inputKeyStore.getKey(keyAlias, oPwd);
+ Certificate[] certChain = inputKeyStore.getCertificateChain(keyAlias);
+ outputKeyStore.setKeyEntry(keyAlias, key, nPwd, certChain);
+ }
+ }
+ outputKeyStore.store(out, nPwd);
+ }
+
+ public static void main(String[] args) {
+ cover2Pfx("D:\\mykeystore.keystore", "D:\\m1.pfx", "123456", null);
+ }
}
diff --git a/src/main/java/com/yexuejc/base/pojo/PagerVO.java b/src/main/java/com/yexuejc/base/pojo/PagerVO.java
index 3e20341..e23aeda 100644
--- a/src/main/java/com/yexuejc/base/pojo/PagerVO.java
+++ b/src/main/java/com/yexuejc/base/pojo/PagerVO.java
@@ -1,9 +1,9 @@
package com.yexuejc.base.pojo;
import com.yexuejc.base.util.JsonUtil;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotNull;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotNull;
/**
* 分页 VO
diff --git a/src/main/java/com/yexuejc/base/util/DateTimeUtil.java b/src/main/java/com/yexuejc/base/util/DateTimeUtil.java
index 50533e5..97041fe 100644
--- a/src/main/java/com/yexuejc/base/util/DateTimeUtil.java
+++ b/src/main/java/com/yexuejc/base/util/DateTimeUtil.java
@@ -13,6 +13,11 @@ import java.util.Date;
* @date: 2018/3/27 10:44
*/
public class DateTimeUtil {
+ public static String DATE_PATTERN = "yyyy-MM-dd";
+ public static String TIME_PATTERN = "HH:mm:ss";
+ public static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
+ public static String DATE_TIME_MS_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS";
+
private DateTimeUtil() {
}
@@ -148,6 +153,55 @@ public class DateTimeUtil {
return date;
}
+ /**
+ * LocalDate 转 Date
+ *
+ * @param localDate
+ * @return
+ */
+ public static Date parseDate(LocalDate localDate) {
+ ZoneId zone = ZoneId.systemDefault();
+ Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
+ return Date.from(instant);
+ }
+
+ /**
+ * LocalDateTime 转 Date
+ *
+ * @param localDateTime
+ * @return
+ */
+ public static Date parseDate(LocalDateTime localDateTime) {
+ ZoneId zoneId = ZoneId.systemDefault();
+ ZonedDateTime zdt = localDateTime.atZone(zoneId);
+ return Date.from(zdt.toInstant());
+ }
+
+ /**
+ * LocalTime 转 Date
+ *
+ * @param localTime 时间
+ * @return 当前日期的指定时间
+ */
+ public static Date parseDate(LocalTime localTime) {
+ LocalDate localDate = LocalDate.now();
+ return parseDate(localDate, localTime);
+ }
+
+ /**
+ * LocalDate + LocalTime 转 Date
+ *
+ * @param localDate 日期
+ * @param localTime 时间
+ * @return 指定日期的指定时间
+ */
+ public static Date parseDate(LocalDate localDate, LocalTime localTime) {
+ LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
+ ZoneId zone = ZoneId.systemDefault();
+ Instant instant = localDateTime.atZone(zone).toInstant();
+ return Date.from(instant);
+ }
+
/**
* Date 转 ZonedDateTime
*
@@ -172,30 +226,6 @@ public class DateTimeUtil {
return instant.atZone(zoneId).toLocalDateTime();
}
- /**
- * LocalDateTime 转 Date
- *
- * @param localDateTime
- * @return
- */
- public static Date parseLocalDateTime(LocalDateTime localDateTime) {
- ZoneId zoneId = ZoneId.systemDefault();
- ZonedDateTime zdt = localDateTime.atZone(zoneId);
- return Date.from(zdt.toInstant());
- }
-
- /**
- * LocalDate 转 Date
- *
- * @param localDate
- * @return
- */
- public static Date parseData(LocalDate localDate) {
- ZoneId zone = ZoneId.systemDefault();
- Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
- return Date.from(instant);
- }
-
/**
* Date 转 LocalDate
*
@@ -204,9 +234,8 @@ public class DateTimeUtil {
*/
public static LocalDate parseLocalDate(Date date) {
Instant instant = date.toInstant();
- ZoneId zone = ZoneId.systemDefault();
- LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
- return localDateTime.toLocalDate();
+ ZoneId zoneId = ZoneId.systemDefault();
+ return instant.atZone(zoneId).toLocalDate();
}
/**
@@ -223,28 +252,77 @@ public class DateTimeUtil {
}
/**
- * Date 转 LocalTime
+ * Long 转 LocalDateTime
*
- * @param localTime
- * @return 当前日期的指定时间
+ * @param timestamp 13位(毫秒)
+ * @return
*/
- public static Date parseDate(LocalTime localTime) {
- LocalDate localDate = LocalDate.now();
- return parseDate(localDate, localTime);
+ public static LocalDateTime parseLocalDateTime13(long timestamp) {
+ Instant instant = Instant.ofEpochMilli(timestamp);
+ ZoneId zone = ZoneId.systemDefault();
+ return LocalDateTime.ofInstant(instant, zone);
}
/**
- * Date 转 LocalTime
+ * Long 转 LocalDateTime
*
- * @param localDate
- * @param localTime
- * @return 指定日期的指定时间
+ * @param timestamp 10位(秒)
+ * @return
*/
- public static Date parseDate(LocalDate localDate, LocalTime localTime) {
- LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
+ public static LocalDateTime parseLocalDateTime10(long timestamp) {
+ Instant instant = Instant.ofEpochMilli(timestamp * 1000);
+ ZoneId zone = ZoneId.systemDefault();
+ return LocalDateTime.ofInstant(instant, zone);
+ }
+
+ /**
+ * LocalDateTime 转 Long
+ *
+ * @param localDateTime
+ * @return 13位(毫秒)
+ */
+ public static long parseLong(LocalDateTime localDateTime) {
ZoneId zone = ZoneId.systemDefault();
Instant instant = localDateTime.atZone(zone).toInstant();
- return Date.from(instant);
+ return instant.toEpochMilli();
+ }
+
+ /**
+ * LocalDate 转 Long
+ *
+ * @param localDate
+ * @return 13位(毫秒)最后3位为0
+ */
+ public static long parseLong(LocalDate localDate) {
+ ZoneId zone = ZoneId.systemDefault();
+ Instant instant = localDate.atStartOfDay(zone).toInstant();
+ return instant.toEpochMilli();
+ }
+
+ /**
+ * 格式化时间
+ * 格式 yyyy-MM-dd HH:mm:ss
+ *
+ * @param dateTime
+ * @return
+ */
+ public static String format(LocalDate dateTime) {
+ return format(dateTime, null);
+ }
+
+ /**
+ * 格式化时间
+ *
+ * @param dateTime
+ * @param pattern 格式 默认:yyyy-MM-dd
+ * @return
+ */
+ public static String format(LocalDate dateTime, String pattern) {
+ if (StrUtil.isEmpty(pattern)) {
+ pattern = DATE_PATTERN;
+ }
+ DateTimeFormatter df = DateTimeFormatter.ofPattern(pattern);
+ return df.format(dateTime);
}
/**
@@ -255,7 +333,7 @@ public class DateTimeUtil {
* @return
*/
public static String format(LocalDateTime dateTime) {
- return format(dateTime, "");
+ return format(dateTime, null);
}
/**
@@ -266,29 +344,30 @@ public class DateTimeUtil {
* @return
*/
public static String format(LocalDateTime dateTime, String pattern) {
- if (pattern.isEmpty()) {
- pattern = "yyyy-MM-dd HH:mm:ss";
+ if (StrUtil.isEmpty(pattern)) {
+ pattern = DATE_TIME_PATTERN;
}
DateTimeFormatter df = DateTimeFormatter.ofPattern(pattern);
return df.format(dateTime);
}
- /** public static void main(String[] args) {
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- System.out.println(df.format(zonedDateTime2Date(ZonedDateTime.now())));
- System.out.println(df2.format(date2ZonedDateTime(new Date())));
- System.out.println(getWeek4First());
- System.out.println(format(getWeek4First(LocalDate.parse("2018-02-10")).atTime(LocalTime.MIN)));
- System.out.println(format(getWeek4Last(LocalDate.parse("2018-02-10")).atTime(LocalTime.MAX)));
+ /** public static void main(String[] args) {
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ System.out.println(df.format(zonedDateTime2Date(ZonedDateTime.now())));
+ System.out.println(df2.format(date2ZonedDateTime(new Date())));
- System.out.println(format(getMonth4First().atTime(LocalTime.MIN)));
- System.out.println(format(getMonth4Last().atTime(LocalTime.MAX)));
+ System.out.println(getWeek4First());
+ System.out.println(format(getWeek4First(LocalDate.parse("2018-02-10")).atTime(LocalTime.MIN)));
+ System.out.println(format(getWeek4Last(LocalDate.parse("2018-02-10")).atTime(LocalTime.MAX)));
- System.out.println(format(getYear4First().atTime(LocalTime.MIN)));
- System.out.println(format(getYear4Last().atTime(LocalTime.MAX)));
+ System.out.println(format(getMonth4First().atTime(LocalTime.MIN)));
+ System.out.println(format(getMonth4Last().atTime(LocalTime.MAX)));
- }*/
+ System.out.println(format(getYear4First().atTime(LocalTime.MIN)));
+ System.out.println(format(getYear4Last().atTime(LocalTime.MAX)));
+
+ }*/
}
diff --git a/src/main/java/com/yexuejc/base/util/DateUtil.java b/src/main/java/com/yexuejc/base/util/DateUtil.java
index 3053c21..7cd93fe 100644
--- a/src/main/java/com/yexuejc/base/util/DateUtil.java
+++ b/src/main/java/com/yexuejc/base/util/DateUtil.java
@@ -21,7 +21,7 @@ public class DateUtil {
public static DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
public static DateFormat TIME_FORMAT = new SimpleDateFormat("HH:mm:ss");
- public static DateFormat DATE_TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ public static DateFormat DATE_TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
public static String DAY_START_TIME = "00:00:00";
public static String DAY_END_TIME = "23:59:59";
diff --git a/src/main/java/com/yexuejc/base/util/ExcelImportUtil.java b/src/main/java/com/yexuejc/base/util/ExcelImportUtil.java
index bf4e6af..9cc1cf6 100644
--- a/src/main/java/com/yexuejc/base/util/ExcelImportUtil.java
+++ b/src/main/java/com/yexuejc/base/util/ExcelImportUtil.java
@@ -1,5 +1,15 @@
package com.yexuejc.base.util;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+
/**
* excel 格式验证工具
*
@@ -48,5 +58,20 @@ public class ExcelImportUtil {
return true;
}
+ public void readExcel(String path) throws IOException {
+ Workbook wb = null;
+ if (isExcel2007(path)) {
+ wb = new XSSFWorkbook(new FileInputStream(new File(path)));
+ } else if (isExcel2003(path)) {
+ wb = new HSSFWorkbook(new FileInputStream(new File(path)));
+ } else {
+ throw new NullPointerException("请上传excel文件");
+ }
+ Sheet sheet = wb.getSheetAt(0);
+ for (int i = 2; i < sheet.getLastRowNum() + 1; i++) {
+ Row row = sheet.getRow(i);
+ }
+ }
+
}
\ No newline at end of file
diff --git a/src/main/java/com/yexuejc/base/util/JsonUtil.java b/src/main/java/com/yexuejc/base/util/JsonUtil.java
index f92a315..2225370 100644
--- a/src/main/java/com/yexuejc/base/util/JsonUtil.java
+++ b/src/main/java/com/yexuejc/base/util/JsonUtil.java
@@ -10,6 +10,7 @@ import com.fasterxml.jackson.databind.type.MapType;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
+import java.util.TimeZone;
import java.util.logging.Logger;
/**
@@ -46,9 +47,26 @@ public class JsonUtil {
objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+ //设置一下时区,可以和程序同步避免时区问题
+ objectMapper.setTimeZone(TimeZone.getDefault());
objectMapper.setDateFormat(DateUtil.DATE_TIME_FORMAT);
}
+ //TODO 待优化
+ public static void initSnakeCase() {
+ //驼峰下划线互转
+ objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
+ }
+
+ /**
+ * 这个设置不能改变JsonUtil自带的objectMapper设置,只能修改传入objMapper的设置
+ * @param objMapper
+ */
+ public static void initSnakeCase(ObjectMapper objMapper) {
+ //驼峰下划线互转
+ objMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
+ }
+
/**
* 每调用一次生成一个全新的ObjectMapper供特殊场景使用,与通用ObjectMapper没有关系
*
@@ -60,6 +78,15 @@ public class JsonUtil {
return objectMapper;
}
+ /**
+ * 返回 ObjectMapper对象,供外部设置特定参数
+ *
+ * @return
+ */
+ public static ObjectMapper getObjectMapper() {
+ return objectMapper;
+ }
+
/**
* 将json转换为某个类
*
@@ -92,7 +119,6 @@ public class JsonUtil {
*/
public static T json2Obj(String json, Class cls) {
T pojo = null;
-
try {
pojo = objectMapper.readValue(json, cls);
} catch (JsonParseException e) {
@@ -101,12 +127,13 @@ public class JsonUtil {
log.warning("json to Object JsonMappingException.\n" + e.getMessage());
} catch (IOException e) {
log.warning("json to Object IOException.\n" + e.getMessage());
+ } catch (Exception e) {
+ e.printStackTrace();
}
return pojo;
}
-
/**
* Json字符串转换为Java对象
*
@@ -220,4 +247,20 @@ public class JsonUtil {
}
return json;
}
+
+ /**
+ * 格式化输出
+ *
+ * @param obj 需要输出对象
+ * @return 格式化后的字符串
+ */
+ public static String formatPrinter(Object obj) {
+ String json = null;
+ try {
+ json = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
+ } catch (JsonProcessingException e) {
+ log.warning("json to Object JsonProcessingException.\n" + e.getMessage());
+ }
+ return json;
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/yexuejc/base/util/JwtUtil.java b/src/main/java/com/yexuejc/base/util/JwtUtil.java
index fde70fb..0fa4172 100644
--- a/src/main/java/com/yexuejc/base/util/JwtUtil.java
+++ b/src/main/java/com/yexuejc/base/util/JwtUtil.java
@@ -124,4 +124,19 @@ public class JwtUtil {
return JsonUtil.json2Obj(subject, cls);
}
+ /**
+ * 解密token为字符串
+ *
+ * @param token
+ * @return
+ */
+ public String parseStr(String token) {
+ String subject = null;
+ try {
+ subject = Jwts.parser().setSigningKey(JWT_SIGNATURE_KEY).parseClaimsJws(token).getBody().getSubject();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return subject;
+ }
}
diff --git a/src/main/java/com/yexuejc/base/util/ObjUtil.java b/src/main/java/com/yexuejc/base/util/ObjUtil.java
index c2f3bee..0ecf378 100644
--- a/src/main/java/com/yexuejc/base/util/ObjUtil.java
+++ b/src/main/java/com/yexuejc/base/util/ObjUtil.java
@@ -2,6 +2,8 @@ package com.yexuejc.base.util;
import java.io.*;
import java.lang.reflect.Field;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
import java.util.*;
/**
@@ -10,7 +12,7 @@ import java.util.*;
* @author maxf
* @version 1.0
* @ClassName ObjUtil
- * @Description
+ * @Description 对象工具:对类的操作
* @date 2018/12/28 15:54
*/
public class ObjUtil {
@@ -108,19 +110,66 @@ public class ObjUtil {
fName = StrUtil.camelToUnderline(f.getName());
}
boolean annotationPresent = f.isAnnotationPresent(ToUeProperty.class);
+ boolean ignore = false;
+ Class> toType = null;
if (annotationPresent) {
ToUeProperty annotation = f.getAnnotation(ToUeProperty.class);
+ ignore = annotation.ignore();
String value = annotation.value();
if (StrUtil.isNotEmpty(value)) {
fName = value;
}
+ if (!annotation.type().getClass().equals(ObjUtil.class)) {
+ toType = annotation.type();
+ }
+ }
+ //忽略
+ if (ignore) {
+ continue;
}
Object o = f.get(obj);
- if (null == o || o.getClass().isPrimitive() || o instanceof String || o instanceof Enum) {
- if (null == o && !putNull) {
- continue;
+ if (null == o && !putNull) {
+ continue;
+ }
+ if (null == o || isPrimitive(o) || o instanceof String || o instanceof Enum) {
+ objMap.put(fName, o);
+ } else if (o instanceof Date) {
+ if (toType != null) {
+ Date date = (Date) o;
+ if (toType.equals(Integer.class)) {
+ objMap.put(fName, (int) date.getTime() / 1000);
+ } else if (toType.equals(Long.class)) {
+ objMap.put(fName, date.getTime());
+ }
+ } else {
+ objMap.put(fName, o);
+ }
+ } else if (o instanceof LocalDate) {
+ if (toType != null) {
+ LocalDate date = (LocalDate) o;
+ if (toType.equals(Integer.class)) {
+ objMap.put(fName, (int) DateTimeUtil.parseLong(date) / 1000);
+ } else if (toType.equals(Long.class)) {
+ objMap.put(fName, DateTimeUtil.parseLong(date));
+ } else if (toType.equals(String.class)) {
+ objMap.put(fName, DateTimeUtil.format(date));
+ }
+ } else {
+ objMap.put(fName, o);
+ }
+ } else if (o instanceof LocalDateTime) {
+ if (toType != null) {
+ LocalDateTime date = (LocalDateTime) o;
+ if (toType.equals(Integer.class)) {
+ objMap.put(fName, (int) DateTimeUtil.parseLong(date) / 1000);
+ } else if (toType.equals(Long.class)) {
+ objMap.put(fName, DateTimeUtil.parseLong(date));
+ } else if (toType.equals(String.class)) {
+ objMap.put(fName, DateTimeUtil.format(date));
+ }
+ } else {
+ objMap.put(fName, o);
}
- objMap.put(fName, f.get(obj));
} else if (o instanceof List) {
List list = (List) o;
List bodyList = new ArrayList();
@@ -133,6 +182,23 @@ public class ObjUtil {
if (bodyList.size() > 0) {
objMap.put(fName, bodyList);
}
+ } else if (o instanceof Map) {
+ Map map = (Map) o;
+ if (map.size() > 0) {
+ objMap.put(fName, map);
+ }
+ } else if (o instanceof Set) {
+ Set list = (Set) o;
+ Set bodyList = new HashSet();
+ list.forEach(it -> {
+ if (null != it) {
+ Map underlineMap = getUnderlineMap(it, isAnnotationAll, putNull);
+ bodyList.add(underlineMap);
+ }
+ });
+ if (bodyList.size() > 0) {
+ objMap.put(fName, bodyList);
+ }
} else {
Map underlineMap = getUnderlineMap(o, isAnnotationAll, putNull);
objMap.put(fName, underlineMap);
@@ -144,75 +210,26 @@ public class ObjUtil {
return objMap;
}
-
- public static void main(String[] args) {
- B a = new B();
- a.nameFirst = "张三";
- a.ageInt = "5165458";
- a.testAss = "asdasdsad";
- a.setaM1("method1");
- a.setbM1("b1Mthod1");
- a.protectedStr = "protectedStr";
- C c = new C();
- c.ageInt = "test";
- a.c = c;
- a.list = new ArrayList<>();
- a.list.add(c);
- Map underlineMap = getUnderlineMap(a, false, false);
- System.out.println(JsonUtil.obj2Json(underlineMap));
+ /**
+ * 判断是否基本类型(包括String,BigDecimal,Number)
+ *
+ * @param obj
+ * @return
+ */
+ public static boolean isPrimitive(Object obj) {
+ if (null == obj) {
+ return false;
+ }
+ boolean b = obj.getClass().isPrimitive()
+ || obj instanceof Integer || obj instanceof Character || obj instanceof Boolean
+ || obj instanceof Number || obj instanceof String || obj instanceof Double || obj instanceof Float
+ || obj instanceof Short || obj instanceof Long || obj instanceof Byte;
+ if (b) {
+ return true;
+ }
+ return false;
}
- static class A implements Serializable {
- private static final long serialVersionUID = -8462118058721865488L;
- public String nameFirst;
- public String ageInt;
- private String aM1;
- @ToUeProperty("p_str")
- protected String protectedStr;
-
- public String getaM1() {
- return aM1;
- }
-
- public A setaM1(String aM1) {
- this.aM1 = aM1;
- return this;
- }
- }
-
- static class B extends A {
- private static final long serialVersionUID = -8462118058721865488L;
- public String testAss;
- private String bM1;
- private C c;
- List list;
-
- public String getbM1() {
- return bM1;
- }
-
- public B setbM1(String bM1) {
- this.bM1 = bM1;
- return this;
- }
- }
-
- static class C extends A {
- private static final long serialVersionUID = -8462118058721865488L;
- public String testAss;
- private String bM1;
-
- public String getbM1() {
- return bM1;
- }
-
- public C setbM1(String bM1) {
- this.bM1 = bM1;
- return this;
- }
- }
-
-
/**
* 深度克隆对象
*
@@ -241,56 +258,4 @@ public class ObjUtil {
return outer;
}
-// public static void main(String[] args) {
-//// test1();
-//// test2();
-//
-// }
-//
-// private static void test2() {
-// B t = new B();
-// t.sex = "男";
-// t.age = 18;
-// A test = new A();
-// test.name = "张三";
-// t.test = test;
-// B b = depthClone(t);
-// System.out.println(JsonUtil.obj2Json(b));
-// }
-//
-// static class A implements Serializable {
-// private static final long serialVersionUID = -8462118058721865488L;
-// public String name;
-// }
-//
-// static class B implements Serializable {
-// private static final long serialVersionUID = 3297717505428005316L;
-// public int age;
-// public String sex;
-// public A test;
-// }
-//
-// static class C implements Serializable {
-// private static final long serialVersionUID = 3297717505428005316L;
-// public int age;
-// public String sex;
-// public A test;
-// }
-//
-// private static void test1() {
-// ApiVO apiVO = new ApiVO(ApiVO.STATUS.S);
-// apiVO.setMsg("asdsadsad");
-// apiVO.setObject1("sadsadsad");
-//
-// Resps obj = new Resps<>();
-// obj.setSucc("安达圣斗士", "ok");
-// System.out.println(obj);
-// apiVO.setObject2(obj);
-// ApiVO apiVO1 = depthClone(apiVO);
-// System.out.println(apiVO == apiVO1);
-// System.out.println(JsonUtil.obj2Json(apiVO1));
-// System.out.println(JsonUtil.obj2Json(apiVO1.getObject1(String.class)));
-// System.out.println(JsonUtil.obj2Json(apiVO1.getObject2(Resps.class)));
-// System.out.println(apiVO1.getObject2(Resps.class) == obj);
-// }
}
diff --git a/src/main/java/com/yexuejc/base/util/RegexUtil.java b/src/main/java/com/yexuejc/base/util/RegexUtil.java
index 5c7daa6..11e14f4 100644
--- a/src/main/java/com/yexuejc/base/util/RegexUtil.java
+++ b/src/main/java/com/yexuejc/base/util/RegexUtil.java
@@ -6,9 +6,11 @@ import java.util.regex.Pattern;
/**
* 正则验证
*
- * @author yexue
- * @expl
- * @time 2017年11月9日 上午11:01:24
+ * @author maxf
+ * @version 1.3.4
+ * @ClassName RegexUtil
+ * @Description
+ * @date 2019/1/3 9:33
*/
public class RegexUtil {
private RegexUtil() {
diff --git a/src/main/java/com/yexuejc/base/util/StrUtil.java b/src/main/java/com/yexuejc/base/util/StrUtil.java
index 55c07c2..6cf384d 100644
--- a/src/main/java/com/yexuejc/base/util/StrUtil.java
+++ b/src/main/java/com/yexuejc/base/util/StrUtil.java
@@ -92,10 +92,10 @@ public final class StrUtil {
}
/**
- * 生成11位编号,可以用作订单号,有很小几率出现重复,需要做异常处理
- * 左边第一位为正负标识:正数1 负数0
- * 剩余位数为UUID的hashcode值
- * 可以再生成的编号基础上嵌入其他标识编码
+ * 生成11位编号,可以用作订单号,有很小几率出现重复,需要做异常处理
+ * 左边第一位为正负标识:正数1 负数0
+ * 剩余位数为UUID的hashcode值
+ * 可以再生成的编号基础上嵌入其他标识编码
*
* @return
*/
diff --git a/src/main/java/com/yexuejc/base/util/ToUeProperty.java b/src/main/java/com/yexuejc/base/util/ToUeProperty.java
index 4398c63..530c9f1 100644
--- a/src/main/java/com/yexuejc/base/util/ToUeProperty.java
+++ b/src/main/java/com/yexuejc/base/util/ToUeProperty.java
@@ -2,13 +2,48 @@ package com.yexuejc.base.util;
import java.lang.annotation.*;
+/**
+ * json转换时的格式指定
+ *
+ * @author: yexuejc
+ * @date: 2021-01-31 12:48:29
+ */
@Target({ElementType.FIELD, ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ToUeProperty {
/**
* 字段名,默认该字段转下划线
+ *
* @return
*/
String value() default "";
+
+ /**
+ * 是否忽略该字段,默认false
+ *
+ * @return
+ */
+ boolean ignore() default false;
+
+ /**
+ * 转换格式
+ * 目前只支持
+ * {@link java.util.Date}、{@link java.time.LocalDate}、{@link java.time.LocalDateTime}
+ * 转{@link Integer}(10位长度)、{@link Long}(13位长度)
+ * 其余无效
+ *
+ * @return
+ * this in out
+ * {@link java.util.Date} {@link Integer} {@link Integer}10位长度时间戳
+ * {@link java.util.Date} {@link Long} {@link Long}13位长度时间戳
+ * {@link java.time.LocalDate} {@link Integer} {@link Integer}10位长度时间戳
+ * {@link java.time.LocalDate} {@link Long} {@link Long}13位长度时间戳(后三位为000)
+ * {@link java.time.LocalDateTime} {@link Integer} {@link Integer}10位长度时间戳
+ * {@link java.time.LocalDateTime} {@link Long} {@link Long}13位长度时间戳
+ *
+ *
+ */
+ Class> type() default ObjUtil.class;
+
}
\ No newline at end of file
diff --git a/src/test/java/com/yexuejc/base/util/ObjUtilTest.java b/src/test/java/com/yexuejc/base/util/ObjUtilTest.java
new file mode 100644
index 0000000..5a8a22f
--- /dev/null
+++ b/src/test/java/com/yexuejc/base/util/ObjUtilTest.java
@@ -0,0 +1,154 @@
+package com.yexuejc.base.util;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * json化输出,改变属性名称,输出类型 {@link ObjUtil} + {@link ToUeProperty} 测试类
+ *
+ * @author: yexuejc
+ * @date: 2021-02-03 10:02:55
+ */
+class ObjUtilTest {
+
+ public static void main(String[] args) {
+ start();
+ }
+
+ public static void start(){
+ B a = new B();
+ a.nameFirst = "张三";
+ a.ageInt = "5165458";
+ a.testAss = "asdasdsad";
+ a.setaM1("method1");
+ a.setbM1("b1Mthod1");
+ a.protectedStr = "protectedStr";
+ a.amount=new BigDecimal("3");
+ a.time = LocalDateTime.now();
+ a.dateTime=new Date();
+ C c = new C();
+ c.ageInt = "test";
+ a.c = c;
+ a.list = new ArrayList<>();
+ a.list.add(c);
+ Map underlineMap = ObjUtil.getUnderlineMap(a, false, false);
+ System.out.println(JsonUtil.formatPrinter(underlineMap));
+ }
+
+ static class A implements Serializable {
+ private static final long serialVersionUID = -8462118058721865488L;
+ public String nameFirst;
+ public String ageInt;
+ private String aM1;
+ @ToUeProperty("p_str")
+ protected String protectedStr;
+
+ public String getaM1() {
+ return aM1;
+ }
+
+ public A setaM1(String aM1) {
+ this.aM1 = aM1;
+ return this;
+ }
+ }
+
+ static class B extends A {
+ private static final long serialVersionUID = -8462118058721865488L;
+ public String testAss;
+ private String bM1;
+
+ @ToUeProperty(type = Integer.class)
+ public BigDecimal amount;
+
+ @ToUeProperty(type = String.class)
+ public LocalDateTime time;
+
+ public Date dateTime;
+
+ private C c;
+ List list;
+
+ public String getbM1() {
+ return bM1;
+ }
+
+ public B setbM1(String bM1) {
+ this.bM1 = bM1;
+ return this;
+ }
+ }
+
+ static class C extends A {
+ private static final long serialVersionUID = -8462118058721865488L;
+ public String testAss;
+ private String bM1;
+
+ public String getbM1() {
+ return bM1;
+ }
+
+ public C setbM1(String bM1) {
+ this.bM1 = bM1;
+ return this;
+ }
+ }
+
+// public static void main(String[] args) {
+//// test1();
+//// test2();
+//
+// }
+//
+// private static void test2() {
+// B t = new B();
+// t.sex = "男";
+// t.age = 18;
+// A test = new A();
+// test.name = "张三";
+// t.test = test;
+// B b = depthClone(t);
+// System.out.println(JsonUtil.obj2Json(b));
+// }
+//
+// static class A implements Serializable {
+// private static final long serialVersionUID = -8462118058721865488L;
+// public String name;
+// }
+//
+// static class B implements Serializable {
+// private static final long serialVersionUID = 3297717505428005316L;
+// public int age;
+// public String sex;
+// public A test;
+// }
+//
+// static class C implements Serializable {
+// private static final long serialVersionUID = 3297717505428005316L;
+// public int age;
+// public String sex;
+// public A test;
+// }
+//
+// private static void test1() {
+// ApiVO apiVO = new ApiVO(ApiVO.STATUS.S);
+// apiVO.setMsg("asdsadsad");
+// apiVO.setObject1("sadsadsad");
+//
+// Resps obj = new Resps<>();
+// obj.setSucc("安达圣斗士", "ok");
+// System.out.println(obj);
+// apiVO.setObject2(obj);
+// ApiVO apiVO1 = depthClone(apiVO);
+// System.out.println(apiVO == apiVO1);
+// System.out.println(JsonUtil.obj2Json(apiVO1));
+// System.out.println(JsonUtil.obj2Json(apiVO1.getObject1(String.class)));
+// System.out.println(JsonUtil.obj2Json(apiVO1.getObject2(Resps.class)));
+// System.out.println(apiVO1.getObject2(Resps.class) == obj);
+// }
+}
\ No newline at end of file