Ver código fonte

!678 add 新增自定义 Date 类型反序列化处理器(支持多种格式)
* add 新增自定义 Date 类型反序列化处理器(支持多种格式)

AprilWind 1 ano atrás
pai
commit
0c2fe34d92

+ 8 - 2
ruoyi-common/ruoyi-common-json/src/main/java/org/dromara/common/json/config/JacksonConfig.java

@@ -1,11 +1,13 @@
 package org.dromara.common.json.config;
 
+import com.fasterxml.jackson.databind.module.SimpleModule;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
 import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
 import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
-import org.dromara.common.json.handler.BigNumberSerializer;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.json.handler.BigNumberSerializer;
+import org.dromara.common.json.handler.CustomDateDeserializer;
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
 import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
@@ -15,6 +17,7 @@ import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.Date;
 import java.util.TimeZone;
 
 /**
@@ -38,7 +41,10 @@ public class JacksonConfig {
             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
             javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(formatter));
             javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(formatter));
-            builder.modules(javaTimeModule);
+            // 自定义 java.util.Date 的反序列化(支持多格式字符串解析)
+            SimpleModule dateModule = new SimpleModule();
+            dateModule.addDeserializer(Date.class, new CustomDateDeserializer());
+            builder.modules(javaTimeModule, dateModule);
             builder.timeZone(TimeZone.getDefault());
             log.info("初始化 jackson 配置");
         };

+ 31 - 0
ruoyi-common/ruoyi-common-json/src/main/java/org/dromara/common/json/handler/CustomDateDeserializer.java

@@ -0,0 +1,31 @@
+package org.dromara.common.json.handler;
+
+import cn.hutool.core.date.DateUtil;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+
+import java.io.IOException;
+import java.util.Date;
+
+/**
+ * 自定义 Date 类型反序列化处理器(支持多种格式)
+ *
+ * @author AprilWind
+ */
+public class CustomDateDeserializer extends JsonDeserializer<Date> {
+
+    /**
+     * 反序列化逻辑:将字符串转换为 Date 对象
+     *
+     * @param p    JSON 解析器,用于获取字符串值
+     * @param ctxt 上下文环境(可用于获取更多配置)
+     * @return 转换后的 Date 对象,若为空字符串返回 null
+     * @throws IOException 当字符串格式非法或转换失败时抛出
+     */
+    @Override
+    public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
+        return DateUtil.parse(p.getText());
+    }
+
+}