解决Long类型在前端、后端传输精度丢失问题

@Configuration
public class JacksonConfiguration {

    /**
     * DateTime格式化字符串
     */
    private static final String DEFAULT_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";

    /**
     * Date格式化字符串
     */
    private static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";

    /**
     * Time格式化字符串
     */
    private static final String DEFAULT_TIME_PATTERN = "HH:mm:ss";

    private static final String DEFAULT_TIME_ZONE = "GMT+8";

    /**
     * Jackson序列化和反序列化转换器,用于转换Post请求体中的json以及将对象序列化为返回响应的json
     */
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        DateFormat dateTimeDf = DateUtil.newSimpleFormat(DEFAULT_DATETIME_PATTERN, Locale.CHINA, TimeZone.getTimeZone(DEFAULT_TIME_ZONE));
        DateTimeFormatter dateTimeDtf = DateTimeFormatter.ofPattern(DEFAULT_DATETIME_PATTERN).withZone(ZoneId.of(DEFAULT_TIME_ZONE));
        DateTimeFormatter dateDtf = DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN).withZone(ZoneId.of(DEFAULT_TIME_ZONE));
        DateTimeFormatter timeDtf = DateTimeFormatter.ofPattern(DEFAULT_TIME_PATTERN).withZone(ZoneId.of(DEFAULT_TIME_ZONE));
        return builder -> builder
                .serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeDtf))
                .serializerByType(LocalDate.class, new LocalDateSerializer(dateDtf))
                .serializerByType(LocalTime.class, new LocalTimeSerializer(timeDtf))
                .serializerByType(Date.class, new DateSerializer(false, dateTimeDf))
                .deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(dateTimeDtf))
                .deserializerByType(LocalDate.class, new LocalDateDeserializer(dateDtf))
                .deserializerByType(LocalTime.class, new LocalTimeDeserializer(timeDtf))
                .deserializerByType(Date.class, new DateDeserializers.DateDeserializer(DateDeserializers.DateDeserializer.instance, dateTimeDf, DEFAULT_DATETIME_PATTERN))
                .serializerByType(Long.TYPE, ToStringSerializer.instance)
                .serializerByType(Long.class, ToStringSerializer.instance);
    }
}

  

posted @ 2024-04-24 10:43  蓝色土耳其  阅读(6)  评论(0编辑  收藏  举报