首页 > 其他分享 >JS对后端响应的long类型数据处理精度丢失问题

JS对后端响应的long类型数据处理精度丢失问题

时间:2022-09-03 14:22:06浏览次数:66  
标签:jackson 对后 FORMAT long JS import com class fasterxml

1、数据库的数据

image

2、前端拿到的数据

image

前端帮我们进行四舍五入了,这并不是我想要的

3、解决办法

把后端响应的数据long类型转成string类型,可以使用Stream流的方式或者for循环的方式,对响应的集合处理一下,但是如果还有其他查询呢岂不是又得处理一下。所以这里推荐使用自定义消息转换器的方式,一劳永逸!!!
实现步骤

1、提供一个对象转换器JacksonObjectMapper
2、在WebMvcConfig配置类中去扩展SpringMVC的消息转换器,在此消息转换器中使用提供的对象消息转换器进行Java对象到JSON的数据转换

package com.qbb.reggie.comfig;

/**
 * @author QIUQIU&LL (个人博客:https://www.cnblogs.com/qbbit)
 * @version 1.0
 * @date 2022-09-03  13:49
 * @Description:
 */

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.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 java.math.BigInteger;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
/**
 * @author QIUQIU&LL (个人博客:https://www.cnblogs.com/qbbit)
 * @version 1.0
 * @date 2022-08-06  22:02
 * @Description:
 */

/**
 * 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象
 * 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象]
 * 从Java对象生成JSON的过程称为 [序列化Java对象到JSON]
 */
public class JacksonObjectMapper 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 JacksonObjectMapper() {
        super();
        //收到未知属性时不报异常
        this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);

        //反序列化时,属性不存在的兼容处理
        this.getDeserializationConfig()
                .withoutFeatures(FAIL_ON_UNKNOWN_PROPERTIES);


        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) // Long类型
                .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT))) // LocalDateTime类型 ===》 yyyy-MM-dd HH:mm:ss
                .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT))) // LocalDate类型 ===》 yyyy-MM-dd
                .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT))); // LocalTime类型 ===》 HH:mm:ss

        //注册功能模块 例如,可以添加自定义序列化器和反序列化器
        this.registerModule(simpleModule);
    }
}
/**
 * @author QIUQIU&LL (个人博客:https://www.cnblogs.com/qbbit)
 * @version 1.0
 * @date 2022-08-06  21:43
 * @Description:配置静态资源访问
 */
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

    /**
     * 扩展SpringMVC消息转换器
     *
     * @param converters
     */
    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        // 创建消息转换器对象
        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
        // 设置对象转换器
        messageConverter.setObjectMapper(new JacksonObjectMapper());
        // 将上面的消息转换器对象,追加到mvc框架的转换器集合中    注意:一定要放在第一个不然可能不生效
        converters.add(0, messageConverter);
    }
}

标签:jackson,对后,FORMAT,long,JS,import,com,class,fasterxml
From: https://www.cnblogs.com/qbbit/p/16652514.html

相关文章

  • shell脚本替换jar包中的fastjson版本
    fastjson版本总是出现漏洞,已经使用了较低fastjson版本,需要更新高版本fastjson,由于java应用比较多,逐个打包重新发布版本是不可能的,需要把jar包中的低版本fastjson替换成高版......
  • 以Docker Compose 建立Node.js 全端开发环境(四) — Todo List Api 串接
    以DockerCompose建立Node.js全端开发环境(四)—TodoListApi串接上个章节我们加入了Prisma作为与资料库沟通的中间层,这篇我们将使用它来协助我们开几只基础的Api......
  • 如何在 Windows 上安装 React.js |如何在 Windows 上安装 React JS |在 Windows 上安
    如何在Windows上安装React.js|如何在Windows上安装ReactJS|在Windows上安装ReactJS—Codexashish在这篇文章中,我们将看到如何在Windows中安装ReactJS......
  • Js 之swiper无缝滚动效果
    一、注意当设置speed太小时会有卡顿,建议设置为6000二、效果图三、代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>swiper4无......
  • luoguP4407 [JSOI2009] 电子字典 解题报告
    传送门题意对于多个字符串,查询其在字典树上的存在性或删除/插入/替换一个字符后存在的个数。思路存在性好说,直接在Trie树上做一遍查找即可。那剩下的三个操作怎么办......
  • 说说 JSON 格式的弊端与解决方法
    JSON格式是目前最流行的数据交互格式,广泛应用于前后端分离的系统。但也有一些场合不适合使用JSON格式。1JSON格式弊端有这样的一个需求:希望把客户端的日志上传到服......
  • nginx njs 0.7.7发布
    最近nginxnjs模块发布了0.77版本了有一些新特性新特性nginx模块 njs对于http以及stream能力的扩展,js_import,js_path,js_set,js_var支持server以及location......
  • [Google] LeetCode 562 Longest Line of Consecutive One in Matrix
    Givenanmxnbinarymatrixmat,returnthelengthofthelongestlineofconsecutiveoneinthematrix.Thelinecouldbehorizontal,vertical,diagonal,or......
  • JS逆向入门篇1
    目标网站:https://ac.scmor.com/第一步点击关键字visit('U3kwBQctIQAjMHZdVC1xRDs5LVQqURUfKxwQGjQACBZ5VysGVytwfmVgDQBVKSMZYRpbGwxAFhYOKl5JAWZRDw4EXzwWBwMT')第二......
  • [Node.js] Setup a Node.js CLI
    CreatingaCLIinNode.jsjusttakesaextrasteportwobecausetheyarereallyjustanordinaryNode.jsappwrappedbehindabincommand.Forthisexercise,......