eight
2024-09-08 f96cc88f8b85cfecd73d41acc2913833882ee5c0
LocalDate json process
已添加2个文件
已修改1个文件
65 ■■■■■ 文件已修改
jh-framework/jh-common/src/main/java/cn/lihu/jh/framework/common/util/json/databind/TimestampLocalDateDeserializer.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-framework/jh-common/src/main/java/cn/lihu/jh/framework/common/util/json/databind/TimestampLocalDateSerializer.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-framework/jh-spring-boot-starter-web/src/main/java/cn/lihu/jh/framework/jackson/config/JhJacksonAutoConfiguration.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jh-framework/jh-common/src/main/java/cn/lihu/jh/framework/common/util/json/databind/TimestampLocalDateDeserializer.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package cn.lihu.jh.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.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
/**
 * åŸºäºŽæ—¶é—´æˆ³çš„ LocalDate ååºåˆ—化器
 *
 * @author majianbo
 */
public class TimestampLocalDateDeserializer extends JsonDeserializer<LocalDate> {
    public static final TimestampLocalDateDeserializer INSTANCE = new TimestampLocalDateDeserializer();
    @Override
    public LocalDate deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        // å°† Long æ—¶é—´æˆ³ï¼Œè½¬æ¢ä¸º LocalDate å¯¹è±¡
        return LocalDate.ofInstant(Instant.ofEpochMilli(p.getValueAsLong()), ZoneId.systemDefault());
    }
}
jh-framework/jh-common/src/main/java/cn/lihu/jh/framework/common/util/json/databind/TimestampLocalDateSerializer.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package cn.lihu.jh.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.ZoneId;
/**
 * åŸºäºŽæ—¶é—´æˆ³çš„ LocalDate åºåˆ—化器
 *
 * @author majianbo
 */
public class TimestampLocalDateSerializer extends JsonSerializer<LocalDate> {
    public static final TimestampLocalDateSerializer INSTANCE = new TimestampLocalDateSerializer();
    @Override
    public void serialize(LocalDate value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        // å°† LocalDate å¯¹è±¡ï¼Œè½¬æ¢ä¸º Long æ—¶é—´æˆ³
        gen.writeNumber(value.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
    }
}
jh-framework/jh-spring-boot-starter-web/src/main/java/cn/lihu/jh/framework/jackson/config/JhJacksonAutoConfiguration.java
@@ -2,9 +2,7 @@
import cn.hutool.core.collection.CollUtil;
import cn.lihu.jh.framework.common.util.json.JsonUtils;
import cn.lihu.jh.framework.common.util.json.databind.NumberSerializer;
import cn.lihu.jh.framework.common.util.json.databind.TimestampLocalDateTimeDeserializer;
import cn.lihu.jh.framework.common.util.json.databind.TimestampLocalDateTimeSerializer;
import cn.lihu.jh.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;
@@ -18,6 +16,7 @@
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
@AutoConfiguration
@@ -27,14 +26,15 @@
    @Bean
    @SuppressWarnings("InstantiationOfUtilityClass")
    public JsonUtils jsonUtils(List<ObjectMapper> objectMappers) {
        // 1.1 åˆ›å»º SimpleModule å¯¹è±¡
        SimpleModule simpleModule = new SimpleModule();
        simpleModule
                // æ–°å¢ž Long ç±»åž‹åºåˆ—化规则,数值超过 2^53-1,在 JS ä¼šå‡ºçŽ°ç²¾åº¦ä¸¢å¤±é—®é¢˜ï¼Œå› æ­¤ Long è‡ªåŠ¨åºåˆ—åŒ–ä¸ºå­—ç¬¦ä¸²ç±»åž‹
                .addSerializer(Long.class, NumberSerializer.INSTANCE)
                .addSerializer(Long.TYPE, NumberSerializer.INSTANCE)
                .addSerializer(LocalDate.class, LocalDateSerializer.INSTANCE)
                .addDeserializer(LocalDate.class, LocalDateDeserializer.INSTANCE)
                .addSerializer(LocalDate.class, TimestampLocalDateSerializer.INSTANCE)
                .addDeserializer(LocalDate.class, TimestampLocalDateDeserializer.INSTANCE)
                .addSerializer(LocalTime.class, LocalTimeSerializer.INSTANCE)
                .addDeserializer(LocalTime.class, LocalTimeDeserializer.INSTANCE)
                // æ–°å¢ž LocalDateTime åºåˆ—化、反序列化规则,使用 Long æ—¶é—´æˆ³