增加LocalTime 序列化啊
This commit is contained in:
parent
b8d26f83f2
commit
a725fd6c3b
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -2,9 +2,7 @@ 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.common.util.json.databind.NumberSerializer;
|
import cn.iocoder.yudao.framework.common.util.json.databind.*;
|
||||||
import cn.iocoder.yudao.framework.common.util.json.databind.TimestampLocalDateTimeDeserializer;
|
|
||||||
import cn.iocoder.yudao.framework.common.util.json.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;
|
||||||
|
@ -39,7 +37,10 @@ public class YudaoJacksonAutoConfiguration {
|
||||||
.addDeserializer(LocalTime.class, LocalTimeDeserializer.INSTANCE)
|
.addDeserializer(LocalTime.class, LocalTimeDeserializer.INSTANCE)
|
||||||
// 新增 LocalDateTime 序列化、反序列化规则,使用 Long 时间戳
|
// 新增 LocalDateTime 序列化、反序列化规则,使用 Long 时间戳
|
||||||
.addSerializer(LocalDateTime.class, TimestampLocalDateTimeSerializer.INSTANCE)
|
.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
|
// 1.2 注册到 objectMapper
|
||||||
objectMappers.forEach(objectMapper -> objectMapper.registerModule(simpleModule));
|
objectMappers.forEach(objectMapper -> objectMapper.registerModule(simpleModule));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue