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 æ¶é´æ³