一、前言
我们在实际开发中肯定会遇到后端的时间传到前端是这个样子的:2022-08-02T15:43:50
这个时候前后端就开始踢皮球了,!!
后端说:前端来做就可!
前端说:后端来做就可!
作为一名有责任感的后端,这种事情怎么能让前端来搞呢!
还有就是Long类型的返回到前端可能会损失精度,这个情况只能后端来做了!
解决方案还是看的开源框架,人家写的,咱就不造轮子了!直接开车!!
二、错误示范
带着T
非常不好,产品要求不带,哈哈,一切按照原型来哦!!
下面的testNum
的值是Long类型的最大值:9223372036854775807
,这样就会损失精度成:9223372036854776000
三、导入依赖
org.springframework.bootspring-boot-starter-json
四、编写配置类
@Configuration(proxyBeanMethods = false)@ConditionalOnClass(ObjectMapper.class)@AutoConfigureBefore(JacksonAutoConfiguration.class)public class JacksonConfiguration {@Bean@ConditionalOnMissingBeanpublic Jackson2ObjectMapperBuilderCustomizer customizer() {return builder -> {builder.locale(Locale.CHINA);builder.timeZone(TimeZone.getTimeZone(ZoneId.systemDefault()));// 设置日期格式builder.simpleDateFormat(DatePattern.NORM_DATETIME_PATTERN);// 解决long类型损失精度builder.serializerByType(Long.class, ToStringSerializer.instance);// 日期格式自定义类builder.modules(new PigJavaTimeModule());};}}
public class JavaTimeModule extends SimpleModule {public JavaTimeModule() {super(PackageVersion.VERSION);// ======================= 时间序列化规则 ===============================// yyyy-MM-dd HH:mm:ssthis.addSerializer(LocalDateTime.class,new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));// yyyy-MM-ddthis.addSerializer(LocalDate.class,new LocalDateSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));// HH:mm:ssthis.addSerializer(LocalTime.class,new LocalTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));// Instant 类型序列化this.addSerializer(Instant.class, InstantSerializer.INSTANCE);// ======================= 时间反序列化规则 ==============================// yyyy-MM-dd HH:mm:ssthis.addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));// yyyy-MM-ddthis.addDeserializer(LocalDate.class,new LocalDateDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));// HH:mm:ssthis.addDeserializer(LocalTime.class,new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));// Instant 反序列化this.addDeserializer(Instant.class, InstantDeserializer.INSTANT);}}
五、测试成果
我们发现日期的烦人的T
被去掉了!再也不用踢皮球了哦!!
我们发现后端返回的类型为Long
时,会自动变为String
类型,再也不会损失精度了,这个很容易忽视!!
如果觉得有用,一键三连起来,小编谢谢大家了!!
有缘人才可以看得到的哦,欢迎关注小编公众号,文章首发抢先看,谢谢大家!!!
点击访问!小编自己的网站,里面也是有很多好的文章哦!