From ab39c0f9b2d1a028af2079259a94211828a14219 Mon Sep 17 00:00:00 2001
From: zkh <1650697374@qq.com>
Date: Wed, 31 Dec 2025 12:03:26 +0800
Subject: [PATCH] =?UTF-8?q?feat(base):=20=E4=B8=BA=20BaseEntity=20?=
=?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BA=8F=E5=88=97=E5=8C=96=E6=8E=A5=E5=8F=A3?=
=?UTF-8?q?=E5=B9=B6=E9=85=8D=E7=BD=AE=20Jackson=20=E6=97=B6=E9=97=B4?=
=?UTF-8?q?=E5=92=8C=20Long=20=E7=B1=BB=E5=9E=8B=E5=A4=84=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 为 BaseEntity 类实现 Serializable 接口以支持序列化
- 新增 JacksonConfig 配置类处理时间格式和 Long 类型精度问题
- 配置时区为 Asia/Shanghai 和中国地区格式
- 添加 Long 类型的序列化和反序列化器避免前端精度丢失
- 将项目版本从 1.5.3 升级到 1.5.4
---
pom.xml | 2 +-
zkh-common/pom.xml | 2 +-
.../java/vip/jcfd/common/core/BaseEntity.java | 97 ++++++++++---------
zkh-data/pom.xml | 2 +-
zkh-file/pom.xml | 2 +-
zkh-log/pom.xml | 2 +-
zkh-web/pom.xml | 2 +-
.../vip/jcfd/web/config/JacksonConfig.java | 56 +++++++++++
8 files changed, 111 insertions(+), 54 deletions(-)
create mode 100644 zkh-web/src/main/java/vip/jcfd/web/config/JacksonConfig.java
diff --git a/pom.xml b/pom.xml
index ba001d2..679ef5b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
vip.jcfd
zkh-framework
- 1.5.3
+ 1.5.4
pom
ZKH Framework
A Java framework for ZKH applications
diff --git a/zkh-common/pom.xml b/zkh-common/pom.xml
index 91c7c28..a3bbfc2 100644
--- a/zkh-common/pom.xml
+++ b/zkh-common/pom.xml
@@ -6,7 +6,7 @@
vip.jcfd
zkh-framework
- 1.5.3
+ 1.5.4
zkh-common
diff --git a/zkh-common/src/main/java/vip/jcfd/common/core/BaseEntity.java b/zkh-common/src/main/java/vip/jcfd/common/core/BaseEntity.java
index 76b5f72..7a5e0df 100644
--- a/zkh-common/src/main/java/vip/jcfd/common/core/BaseEntity.java
+++ b/zkh-common/src/main/java/vip/jcfd/common/core/BaseEntity.java
@@ -8,72 +8,73 @@ import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+import java.io.Serializable;
import java.time.LocalDateTime;
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
-public class BaseEntity {
- @Id
- @GeneratedValue(strategy = GenerationType.AUTO)
- private Long id;
+public class BaseEntity implements Serializable {
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private Long id;
- @Column
- @CreatedDate
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private LocalDateTime createTime;
+ @Column
+ @CreatedDate
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime createTime;
- @Column
- @LastModifiedDate
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private LocalDateTime updateTime;
+ @Column
+ @LastModifiedDate
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime updateTime;
- @Column
- @CreatedBy
- private String createBy;
+ @Column
+ @CreatedBy
+ private String createBy;
- @Column
- @LastModifiedBy
- private String updateBy;
+ @Column
+ @LastModifiedBy
+ private String updateBy;
- public Long getId() {
- return id;
- }
+ public Long getId() {
+ return id;
+ }
- public void setId(Long id) {
- this.id = id;
- }
+ public void setId(Long id) {
+ this.id = id;
+ }
- public LocalDateTime getCreateTime() {
- return createTime;
- }
+ public LocalDateTime getCreateTime() {
+ return createTime;
+ }
- public void setCreateTime(LocalDateTime createTime) {
- this.createTime = createTime;
- }
+ public void setCreateTime(LocalDateTime createTime) {
+ this.createTime = createTime;
+ }
- public LocalDateTime getUpdateTime() {
- return updateTime;
- }
+ public LocalDateTime getUpdateTime() {
+ return updateTime;
+ }
- public void setUpdateTime(LocalDateTime updateTime) {
- this.updateTime = updateTime;
- }
+ public void setUpdateTime(LocalDateTime updateTime) {
+ this.updateTime = updateTime;
+ }
- public String getCreateBy() {
- return createBy;
- }
+ public String getCreateBy() {
+ return createBy;
+ }
- public void setCreateBy(String createBy) {
- this.createBy = createBy;
- }
+ public void setCreateBy(String createBy) {
+ this.createBy = createBy;
+ }
- public String getUpdateBy() {
- return updateBy;
- }
+ public String getUpdateBy() {
+ return updateBy;
+ }
- public void setUpdateBy(String updateBy) {
- this.updateBy = updateBy;
- }
+ public void setUpdateBy(String updateBy) {
+ this.updateBy = updateBy;
+ }
}
diff --git a/zkh-data/pom.xml b/zkh-data/pom.xml
index 4795d31..f1d2b3a 100644
--- a/zkh-data/pom.xml
+++ b/zkh-data/pom.xml
@@ -6,7 +6,7 @@
vip.jcfd
zkh-framework
- 1.5.3
+ 1.5.4
zkh-data
diff --git a/zkh-file/pom.xml b/zkh-file/pom.xml
index 2f83daa..fcedc59 100644
--- a/zkh-file/pom.xml
+++ b/zkh-file/pom.xml
@@ -6,7 +6,7 @@
vip.jcfd
zkh-framework
- 1.5.3
+ 1.5.4
zkh-file
diff --git a/zkh-log/pom.xml b/zkh-log/pom.xml
index 2ab14ed..804a008 100644
--- a/zkh-log/pom.xml
+++ b/zkh-log/pom.xml
@@ -6,7 +6,7 @@
vip.jcfd
zkh-framework
- 1.5.3
+ 1.5.4
zkh-log
diff --git a/zkh-web/pom.xml b/zkh-web/pom.xml
index c9580e5..84947f3 100644
--- a/zkh-web/pom.xml
+++ b/zkh-web/pom.xml
@@ -7,7 +7,7 @@
vip.jcfd
zkh-framework
- 1.5.3
+ 1.5.4
zkh-web
diff --git a/zkh-web/src/main/java/vip/jcfd/web/config/JacksonConfig.java b/zkh-web/src/main/java/vip/jcfd/web/config/JacksonConfig.java
new file mode 100644
index 0000000..68e5e54
--- /dev/null
+++ b/zkh-web/src/main/java/vip/jcfd/web/config/JacksonConfig.java
@@ -0,0 +1,56 @@
+package vip.jcfd.web.config;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.io.IOException;
+import java.time.ZoneId;
+import java.util.Locale;
+import java.util.TimeZone;
+
+
+@Configuration
+public class JacksonConfig {
+
+ /**
+ * Configures Jackson mapper with locale, timezone, date format, serializer
+ */
+ @Bean
+ public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
+ return jacksonObjectMapperBuilder -> {
+ jacksonObjectMapperBuilder.locale(Locale.CHINA);
+ jacksonObjectMapperBuilder.timeZone(TimeZone.getTimeZone(ZoneId.of("Asia/Shanghai")));
+ jacksonObjectMapperBuilder.simpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ jacksonObjectMapperBuilder.serializers(new LongSerializer());
+ jacksonObjectMapperBuilder.deserializers(new LongDeserializer());
+ };
+ }
+
+ public static class LongSerializer extends JsonSerializer {
+ @Override
+ public void serialize(Long value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
+ if (value == null) {
+ gen.writeNull();
+ return;
+ }
+ gen.writeString(String.valueOf(value));
+ }
+ }
+
+ public static class LongDeserializer extends JsonDeserializer {
+ @Override
+ public Long deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
+ if (p.getText() == null) {
+ return null;
+ }
+ return Long.parseLong(p.getText());
+ }
+ }
+}