Преглед изворни кода

fix 解决Long精度丢失问题

pengzhenggao пре 1 месец
родитељ
комит
f621003203

+ 64 - 0
fuintBackend/fuint-application/src/main/java/com/fuint/common/config/CustomObjectMapper.java

@@ -0,0 +1,64 @@
+package com.fuint.common.config;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+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.deser.LocalTimeDeserializer;
+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.context.annotation.Configuration;
+
+import java.math.BigInteger;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.TimeZone;
+
+@Configuration
+public class CustomObjectMapper extends ObjectMapper {
+
+
+
+	public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
+	public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
+	public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";
+
+	public CustomObjectMapper() {
+
+
+		super();
+		//去掉默认的时间戳格式
+		this.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+		//设置为东八区
+		this.setTimeZone(TimeZone.getTimeZone("GMT+8"));
+		// 设置输入:禁止把POJO中值为null的字段映射到json字符串中
+		//this.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);
+		this.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
+		// 空值不序列化
+		this.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+		// 反序列化时,属性不存在的兼容处理
+		this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+		// 序列化枚举是以toString()来输出,默认false,即默认以name()来输出
+		this.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true);
+
+		SimpleModule simpleModule = new SimpleModule()
+				.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
+				.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
+				.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))
+				.addSerializer(BigInteger.class, ToStringSerializer.instance)
+				.addSerializer(Long.class, ToStringSerializer.instance)
+				.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
+				.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
+				.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));
+
+		//注册功能模块 例如,可以添加自定义序列化器和反序列化器
+		this.registerModule(simpleModule);
+	}
+}

+ 2 - 0
fuintBackend/fuint-application/src/main/java/com/fuint/common/config/RedisConfig.java

@@ -1,6 +1,8 @@
 package com.fuint.common.config;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CachingConfigurerSupport;
 import org.springframework.cache.annotation.EnableCaching;

+ 23 - 0
fuintBackend/fuint-application/src/main/java/com/fuint/common/config/WebConfig.java

@@ -1,15 +1,25 @@
 package com.fuint.common.config;
 
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.fuint.common.web.AdminUserInterceptor;
 import com.fuint.common.web.CommandInterceptor;
 import com.fuint.common.web.ClientUserInterceptor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.http.CacheControl;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
 import org.springframework.web.filter.CharacterEncodingFilter;
 import org.springframework.web.servlet.config.annotation.*;
 import org.springframework.web.servlet.resource.CssLinkResourceTransformer;
 import org.springframework.web.servlet.resource.VersionResourceResolver;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -100,4 +110,17 @@ public class WebConfig extends WebMvcConfigurationSupport {
         filter.setForceEncoding(true);
         return filter;
     }
+
+    @Autowired
+    private CustomObjectMapper customObjectMapper;
+    @Override
+    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
+
+        //创建消息转换器对象
+        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
+        //设置消息转换器,底层使用jackson将Java对象转成json
+        messageConverter.setObjectMapper(customObjectMapper);
+        //将我们自定义的消息转换器追加到mvc框架的集合转换器中
+        converters.add(0, messageConverter);
+    }
 }

+ 2 - 0
fuintBackend/fuint-application/src/main/java/com/fuint/common/vo/MaterialVo.java

@@ -1,5 +1,7 @@
 package com.fuint.common.vo;
 
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;