Pre Merge pull request !1139 from shixiaohe/master

This commit is contained in:
shixiaohe 2025-04-26 02:00:38 +00:00 committed by Gitee
commit 8e273259ba
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
3 changed files with 76 additions and 4 deletions

View File

@ -0,0 +1,34 @@
package cn.iocoder.yudao.framework.common.util.json.databind;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.io.IOException;
import java.time.Instant;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
/**
* 基于时间戳的 LocalTime 反序列化器
*
* @author shixiaohe
*/
public class TimestampLocalTimeDeserializer extends JsonDeserializer<LocalTime> {
public static final TimestampLocalTimeDeserializer INSTANCE = new TimestampLocalTimeDeserializer();
@Override
public LocalTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
// 从时间戳转换为 Instant
Instant instant = Instant.ofEpochMilli(p.getValueAsLong());
// 转换为 ZonedDateTime LocalDateTime
ZonedDateTime zonedDateTime = instant.atZone(ZoneId.systemDefault());
// 提取时间部分
return zonedDateTime.toLocalTime();
}
}

View File

@ -0,0 +1,37 @@
package cn.iocoder.yudao.framework.common.util.json.databind;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
/**
* 基于时间戳的 LocalTime 序列化器
*
* @author shixiaohe
*/
public class TimestampLocalTimeSerializer extends JsonSerializer<LocalTime> {
public static final TimestampLocalTimeSerializer INSTANCE = new TimestampLocalTimeSerializer();
@Override
public void serialize(LocalTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
// 获取当前日期
LocalDate today = LocalDate.now();
// LocalTime 和日期合并为 LocalDateTime
LocalDateTime localDateTime = LocalDateTime.of(today, value);
// 转换为时间戳毫秒
long timestamp = localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
// 写入时间戳
gen.writeNumber(timestamp);
}
}

View File

@ -2,9 +2,7 @@ package cn.iocoder.yudao.framework.jackson.config;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.common.util.json.databind.NumberSerializer;
import cn.iocoder.yudao.framework.common.util.json.databind.TimestampLocalDateTimeDeserializer;
import cn.iocoder.yudao.framework.common.util.json.databind.TimestampLocalDateTimeSerializer;
import cn.iocoder.yudao.framework.common.util.json.databind.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
@ -39,7 +37,10 @@ public class YudaoJacksonAutoConfiguration {
.addDeserializer(LocalTime.class, LocalTimeDeserializer.INSTANCE)
// 新增 LocalDateTime 序列化反序列化规则使用 Long 时间戳
.addSerializer(LocalDateTime.class, TimestampLocalDateTimeSerializer.INSTANCE)
.addDeserializer(LocalDateTime.class, TimestampLocalDateTimeDeserializer.INSTANCE);
.addDeserializer(LocalDateTime.class, TimestampLocalDateTimeDeserializer.INSTANCE)
// 新增 LocalTime 序列化反序列化规则使用 Long 时间戳
.addSerializer(LocalTime.class, TimestampLocalTimeSerializer.INSTANCE)
.addDeserializer(LocalTime.class, TimestampLocalTimeDeserializer.INSTANCE);
// 1.2 注册到 objectMapper
objectMappers.forEach(objectMapper -> objectMapper.registerModule(simpleModule));