mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 10:18:42 +08:00 
			
		
		
		
	移除自定义的Long序列化字符串类型规则
新增LocalDateTime的序列化、反序列化规则
This commit is contained in:
		| @@ -1,12 +1,16 @@ | |||||||
| package cn.iocoder.dashboard.framework.jackson.config; | package cn.iocoder.dashboard.framework.jackson.config; | ||||||
|  |  | ||||||
| import cn.iocoder.dashboard.framework.jackson.ser.LongSerializer; | import cn.iocoder.dashboard.framework.jackson.deser.LocalDateTimeDeserializer; | ||||||
|  | import cn.iocoder.dashboard.framework.jackson.ser.LocalDateTimeSerializer; | ||||||
| import cn.iocoder.dashboard.util.json.JsonUtils; | import cn.iocoder.dashboard.util.json.JsonUtils; | ||||||
| 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.databind.ser.std.ToStringSerializer; | ||||||
| import org.springframework.context.annotation.Bean; | import org.springframework.context.annotation.Bean; | ||||||
| import org.springframework.context.annotation.Configuration; | import org.springframework.context.annotation.Configuration; | ||||||
|  |  | ||||||
|  | import java.time.LocalDateTime; | ||||||
|  |  | ||||||
| @Configuration | @Configuration | ||||||
| public class JacksonConfig { | public class JacksonConfig { | ||||||
|  |  | ||||||
| @@ -15,11 +19,15 @@ public class JacksonConfig { | |||||||
|     public JsonUtils jsonUtils(ObjectMapper objectMapper) { |     public JsonUtils jsonUtils(ObjectMapper objectMapper) { | ||||||
|         SimpleModule simpleModule = new SimpleModule(); |         SimpleModule simpleModule = new SimpleModule(); | ||||||
|         /* |         /* | ||||||
|          * 新增Long类型序列化规则,数值超过2^53-1,在JS会出现精度丢失问题,因此Long自动序列化为字符串类型 |          * 1. 新增Long类型序列化规则,数值超过2^53-1,在JS会出现精度丢失问题,因此Long自动序列化为字符串类型 | ||||||
|  |          * 2. 新增LocalDateTime序列化、反序列化规则 | ||||||
|          */ |          */ | ||||||
|         simpleModule.addSerializer(Long.class,LongSerializer.getInstance()) |         simpleModule.addSerializer(Long.class, ToStringSerializer.instance) | ||||||
|                     .addSerializer(Long.TYPE,LongSerializer.getInstance()); |                     .addSerializer(Long.TYPE, ToStringSerializer.instance) | ||||||
|         objectMapper.registerModule(simpleModule); |                     .addSerializer(LocalDateTime.class, LocalDateTimeSerializer.INSTANCE) | ||||||
|  |                     .addDeserializer(LocalDateTime.class, LocalDateTimeDeserializer.INSTANCE); | ||||||
|  |  | ||||||
|  |         objectMapper.registerModules(simpleModule); | ||||||
|  |  | ||||||
|         JsonUtils.init(objectMapper); |         JsonUtils.init(objectMapper); | ||||||
|         return new JsonUtils(); |         return new JsonUtils(); | ||||||
|   | |||||||
| @@ -0,0 +1,26 @@ | |||||||
|  | package cn.iocoder.dashboard.framework.jackson.deser; | ||||||
|  |  | ||||||
|  | import com.fasterxml.jackson.core.JsonParser; | ||||||
|  | import com.fasterxml.jackson.core.JsonProcessingException; | ||||||
|  | import com.fasterxml.jackson.databind.DeserializationContext; | ||||||
|  | import com.fasterxml.jackson.databind.JsonDeserializer; | ||||||
|  |  | ||||||
|  | import java.io.IOException; | ||||||
|  | import java.time.Instant; | ||||||
|  | import java.time.LocalDateTime; | ||||||
|  | import java.time.ZoneId; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * LocalDateTime反序列化规则 | ||||||
|  |  * <p> | ||||||
|  |  * 会将毫秒级时间戳反序列化为LocalDateTime | ||||||
|  |  */ | ||||||
|  | public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> { | ||||||
|  |  | ||||||
|  |     public static final LocalDateTimeDeserializer INSTANCE = new LocalDateTimeDeserializer(); | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { | ||||||
|  |         return LocalDateTime.ofInstant(Instant.ofEpochMilli(p.getValueAsLong()), ZoneId.systemDefault()); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,24 @@ | |||||||
|  | package cn.iocoder.dashboard.framework.jackson.ser; | ||||||
|  |  | ||||||
|  | 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.LocalDateTime; | ||||||
|  | import java.time.ZoneId; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * LocalDateTime序列化规则 | ||||||
|  |  * <p> | ||||||
|  |  * 会将LocalDateTime序列化为毫秒级时间戳 | ||||||
|  |  */ | ||||||
|  | public class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> { | ||||||
|  |  | ||||||
|  |     public static final LocalDateTimeSerializer INSTANCE = new LocalDateTimeSerializer(); | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException { | ||||||
|  |         gen.writeNumber(value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,26 +0,0 @@ | |||||||
| package cn.iocoder.dashboard.framework.jackson.ser; |  | ||||||
|  |  | ||||||
| import com.fasterxml.jackson.core.JsonGenerator; |  | ||||||
| import com.fasterxml.jackson.databind.JsonSerializer; |  | ||||||
| import com.fasterxml.jackson.databind.SerializerProvider; |  | ||||||
|  |  | ||||||
| import java.io.IOException; |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Long类型序列化规则 |  | ||||||
|  * <p> |  | ||||||
|  * 数值超过2^53-1,在JS会出现精度丢失问题,因此Long自动序列化为字符串类型 |  | ||||||
|  */ |  | ||||||
| public class LongSerializer extends JsonSerializer<Long> { |  | ||||||
|  |  | ||||||
|     private static final LongSerializer LONG_SERIALIZER = new LongSerializer(); |  | ||||||
|  |  | ||||||
|     @Override |  | ||||||
|     public void serialize(Long value, JsonGenerator gen, SerializerProvider serializers) throws IOException { |  | ||||||
|         gen.writeString(value.toString()); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public static LongSerializer getInstance() { |  | ||||||
|         return LONG_SERIALIZER; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
		Reference in New Issue
	
	Block a user
	 hexiaowu
					hexiaowu