|
|
@@ -0,0 +1,80 @@
|
|
|
+package top.haijunit.common.config;
|
|
|
+
|
|
|
+import cn.hutool.core.date.DatePattern;
|
|
|
+import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
+import com.fasterxml.jackson.databind.module.SimpleModule;
|
|
|
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
|
|
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
|
|
+import com.fasterxml.jackson.datatype.jsr310.deser.InstantDeserializer;
|
|
|
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
|
|
|
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
|
|
|
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
|
|
|
+import com.fasterxml.jackson.datatype.jsr310.ser.InstantSerializer;
|
|
|
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
|
|
|
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
|
|
|
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
|
|
|
+import org.springframework.boot.autoconfigure.AutoConfiguration;
|
|
|
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
|
|
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
|
|
+import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
|
|
|
+import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
|
|
|
+import org.springframework.context.annotation.Bean;
|
|
|
+import top.haijunit.common.factory.BigNumberSerializer;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.BigInteger;
|
|
|
+import java.time.Instant;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.LocalTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.Locale;
|
|
|
+import java.util.TimeZone;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author zhanghaijun
|
|
|
+ * @date 2023/11/24 11:51
|
|
|
+ * @description [一句话描述该类的功能]
|
|
|
+ */
|
|
|
+@AutoConfiguration
|
|
|
+@ConditionalOnClass(ObjectMapper.class)
|
|
|
+@AutoConfigureBefore(JacksonAutoConfiguration.class)
|
|
|
+public class JacksonConfig {
|
|
|
+
|
|
|
+ @Bean
|
|
|
+ public Jackson2ObjectMapperBuilderCustomizer customizer() {
|
|
|
+ return builder -> {
|
|
|
+ builder.locale(Locale.CHINA);
|
|
|
+ builder.timeZone(TimeZone.getDefault());
|
|
|
+ builder.simpleDateFormat(DatePattern.NORM_DATETIME_PATTERN);
|
|
|
+ builder.modules(getModule());
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 序列化和反序列化 */
|
|
|
+ private SimpleModule getModule() {
|
|
|
+ JavaTimeModule module = new JavaTimeModule();
|
|
|
+ module.addSerializer(Long.class, BigNumberSerializer.INSTANCE);
|
|
|
+ module.addSerializer(BigInteger.class, BigNumberSerializer.INSTANCE);
|
|
|
+ module.addSerializer(BigDecimal.class, ToStringSerializer.instance);
|
|
|
+ // ======================= 时间序列化规则 ===============================
|
|
|
+ // yyyy-MM-dd HH:mm:ss
|
|
|
+ module.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DatePattern.NORM_DATETIME_FORMATTER));
|
|
|
+ // yyyy-MM-dd
|
|
|
+ module.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ISO_LOCAL_DATE));
|
|
|
+ // HH:mm:ss
|
|
|
+ module.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ISO_LOCAL_TIME));
|
|
|
+ // Instant 类型序列化
|
|
|
+ module.addSerializer(Instant.class, InstantSerializer.INSTANCE);
|
|
|
+ // ======================= 时间反序列化规则 ==============================
|
|
|
+ // yyyy-MM-dd HH:mm:ss
|
|
|
+ module.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DatePattern.NORM_DATETIME_FORMATTER));
|
|
|
+ // yyyy-MM-dd
|
|
|
+ module.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ISO_LOCAL_DATE));
|
|
|
+ // HH:mm:ss
|
|
|
+ module.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ISO_LOCAL_TIME));
|
|
|
+ // Instant 反序列化
|
|
|
+ module.addDeserializer(Instant.class, InstantDeserializer.INSTANT);
|
|
|
+ return module;
|
|
|
+ }
|
|
|
+}
|