diff --git a/nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/JacksonConfig.java b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/JacksonConfig.java index 23338a13..19ceed6d 100644 --- a/nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/JacksonConfig.java +++ b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/config/JacksonConfig.java @@ -1,13 +1,18 @@ package com.nflg.wms.starter.config; import cn.hutool.core.date.DatePattern; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -16,13 +21,29 @@ import java.time.format.DateTimeFormatter; public class JacksonConfig { @Bean - public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() { - return new Jackson2ObjectMapperBuilder() - .serializerByType(Long.class, new ToStringSerializer()) - .serializerByType(Long.TYPE, new ToStringSerializer()) - .serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))) - .deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))) - .serializerByType(LocalDate.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN))) - .deserializerByType(LocalDate.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN))); + public ObjectMapper objectMapper() { + return new ObjectMapper() + .registerModule(customDateTimeModule()) + .registerModule(bigDecimalModule()) + .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false) + .configure(SerializationFeature.INDENT_OUTPUT, false); + } + + private SimpleModule customDateTimeModule() { + SimpleModule module = new SimpleModule(); + module.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))); + module.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))); + module.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN))); + module.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN))); + return module; + } + + private SimpleModule bigDecimalModule() { + SimpleModule module = new SimpleModule(); + // BigDecimal序列化为字符串避免精度丢失 + module.addSerializer(BigDecimal.class, new ToStringSerializer()); + // Long类型序列化为字符串 (解决前端JS精度问题) + module.addSerializer(Long.class, new ToStringSerializer()); + return module; } } \ No newline at end of file