移除自定义的Long序列化字符串类型规则
新增LocalDateTime的序列化、反序列化规则
This commit is contained in:
parent
fe31d61de9
commit
4067087da6
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user