This commit is contained in:
YunaiV 2024-04-10 13:03:46 +08:00
commit 3bbbf8db11
3 changed files with 20 additions and 16 deletions

View File

@ -2,9 +2,9 @@ package cn.iocoder.yudao.framework.jackson.config;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils; import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.jackson.core.databind.LocalDateTimeDeserializer;
import cn.iocoder.yudao.framework.jackson.core.databind.LocalDateTimeSerializer;
import cn.iocoder.yudao.framework.jackson.core.databind.NumberSerializer; import cn.iocoder.yudao.framework.jackson.core.databind.NumberSerializer;
import cn.iocoder.yudao.framework.jackson.core.databind.TimestampLocalDateTimeDeserializer;
import cn.iocoder.yudao.framework.jackson.core.databind.TimestampLocalDateTimeSerializer;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
@ -37,13 +37,13 @@ public class YudaoJacksonAutoConfiguration {
.addDeserializer(LocalDate.class, LocalDateDeserializer.INSTANCE) .addDeserializer(LocalDate.class, LocalDateDeserializer.INSTANCE)
.addSerializer(LocalTime.class, LocalTimeSerializer.INSTANCE) .addSerializer(LocalTime.class, LocalTimeSerializer.INSTANCE)
.addDeserializer(LocalTime.class, LocalTimeDeserializer.INSTANCE) .addDeserializer(LocalTime.class, LocalTimeDeserializer.INSTANCE)
// 新增 LocalDateTime 序列化反序列化规则 // 新增 LocalDateTime 序列化反序列化规则使用 Long 时间戳
.addSerializer(LocalDateTime.class, LocalDateTimeSerializer.INSTANCE) .addSerializer(LocalDateTime.class, TimestampLocalDateTimeSerializer.INSTANCE)
.addDeserializer(LocalDateTime.class, LocalDateTimeDeserializer.INSTANCE); .addDeserializer(LocalDateTime.class, TimestampLocalDateTimeDeserializer.INSTANCE);
// 1.2 注册到 objectMapper // 1.2 注册到 objectMapper
objectMappers.forEach(objectMapper -> objectMapper.registerModule(simpleModule)); objectMappers.forEach(objectMapper -> objectMapper.registerModule(simpleModule));
// 2. 设置 objectMapper JsonUtils { // 2. 设置 objectMapper JsonUtils
JsonUtils.init(CollUtil.getFirst(objectMappers)); JsonUtils.init(CollUtil.getFirst(objectMappers));
log.info("[init][初始化 JsonUtils 成功]"); log.info("[init][初始化 JsonUtils 成功]");
return new JsonUtils(); return new JsonUtils();

View File

@ -10,16 +10,18 @@ import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
/** /**
* LocalDateTime反序列化规则 * 基于时间戳的 LocalDateTime 反序列化器
* <p> *
* 会将毫秒级时间戳反序列化为LocalDateTime * @author 老五
*/ */
public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> { public class TimestampLocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
public static final LocalDateTimeDeserializer INSTANCE = new LocalDateTimeDeserializer(); public static final TimestampLocalDateTimeDeserializer INSTANCE = new TimestampLocalDateTimeDeserializer();
@Override @Override
public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
// Long 时间戳转换为 LocalDateTime 对象
return LocalDateTime.ofInstant(Instant.ofEpochMilli(p.getValueAsLong()), ZoneId.systemDefault()); return LocalDateTime.ofInstant(Instant.ofEpochMilli(p.getValueAsLong()), ZoneId.systemDefault());
} }
} }

View File

@ -9,16 +9,18 @@ import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
/** /**
* LocalDateTime序列化规则 * 基于时间戳的 LocalDateTime 序列化器
* <p> *
* 会将LocalDateTime序列化为毫秒级时间戳 * @author 老五
*/ */
public class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> { public class TimestampLocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
public static final LocalDateTimeSerializer INSTANCE = new LocalDateTimeSerializer(); public static final TimestampLocalDateTimeSerializer INSTANCE = new TimestampLocalDateTimeSerializer();
@Override @Override
public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException { public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
// LocalDateTime 对象转换为 Long 时间戳
gen.writeNumber(value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); gen.writeNumber(value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
} }
} }