From 2cdcf4fc7c24e10fdd811bfc0b63283f57901064 Mon Sep 17 00:00:00 2001 From: yexuejc <1107047387@qq.com> Date: Wed, 3 Feb 2021 11:40:11 +0800 Subject: [PATCH] =?UTF-8?q?1.4.2=20=E4=BC=98=E5=8C=96=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=E6=A0=BC=E5=BC=8F=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=B3=A8=E8=A7=A3=20ToUeProperty=20=E8=BD=AC=E6=8D=A2=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E4=B8=BA=E6=97=B6=E9=97=B4=E6=88=B3=E7=9A=84=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../java/com/yexuejc/base/pojo/PagerVO.java | 4 +- .../com/yexuejc/base/util/DateTimeUtil.java | 47 ++++- .../java/com/yexuejc/base/util/DateUtil.java | 2 +- .../java/com/yexuejc/base/util/ObjUtil.java | 171 +++++------------- .../com/yexuejc/base/util/ToUeProperty.java | 21 +++ .../com/yexuejc/base/util/ObjUtilTest.java | 154 ++++++++++++++++ 7 files changed, 271 insertions(+), 130 deletions(-) create mode 100644 src/test/java/com/yexuejc/base/util/ObjUtilTest.java diff --git a/pom.xml b/pom.xml index 4713a52..7b5bb77 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ top.yexuejc yexuejc-base - 1.4.1 + 1.4.2 ${project.artifactId} https://github.com/yexuejc/yexuejc-base 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 6b0729b..2c3ff3b 100644 --- a/src/main/java/com/yexuejc/base/util/DateTimeUtil.java +++ b/src/main/java/com/yexuejc/base/util/DateTimeUtil.java @@ -13,6 +13,10 @@ import java.util.Date; * @date: 2018/3/27 10:44 */ public class DateTimeUtil { + public static String DATE_PATTERN = "yyyy-MM-dd"; + 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() { } @@ -281,6 +285,45 @@ public class DateTimeUtil { Instant instant = localDateTime.atZone(zone).toInstant(); 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); + } + /** * 格式化时间
* 格式 yyyy-MM-dd HH:mm:ss @@ -300,8 +343,8 @@ 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); 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/ObjUtil.java b/src/main/java/com/yexuejc/base/util/ObjUtil.java index 2943974..0ecf378 100644 --- a/src/main/java/com/yexuejc/base/util/ObjUtil.java +++ b/src/main/java/com/yexuejc/base/util/ObjUtil.java @@ -2,7 +2,8 @@ package com.yexuejc.base.util; import java.io.*; import java.lang.reflect.Field; -import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.*; /** @@ -110,6 +111,7 @@ public class ObjUtil { } boolean annotationPresent = f.isAnnotationPresent(ToUeProperty.class); boolean ignore = false; + Class toType = null; if (annotationPresent) { ToUeProperty annotation = f.getAnnotation(ToUeProperty.class); ignore = annotation.ignore(); @@ -117,17 +119,57 @@ public class ObjUtil { 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 && !putNull) { + continue; + } if (null == o || isPrimitive(o) || o instanceof String || o instanceof Enum) { - if (null == o && !putNull) { - continue; + 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(); @@ -181,80 +223,13 @@ public class ObjUtil { 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 || obj instanceof Date; + || obj instanceof Short || obj instanceof Long || obj instanceof Byte; if (b) { return true; } return false; } - 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)); - } - - 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; - } - } - /** *

深度克隆对象

*

@@ -283,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/ToUeProperty.java b/src/main/java/com/yexuejc/base/util/ToUeProperty.java index 4cac11e..530c9f1 100644 --- a/src/main/java/com/yexuejc/base/util/ToUeProperty.java +++ b/src/main/java/com/yexuejc/base/util/ToUeProperty.java @@ -25,4 +25,25 @@ public @interface ToUeProperty { * @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