js 丢失 Long 精度 解决方案

方法:传给前端时转成String

  • 单个
/**
 * ID
 */
@JsonSerialize(using = ToStringSerializer.class)
private Long id;

 

  • 全局(推荐使用) SpringBoot2

参考:

  1. SpringBoot全局配置long转String丢失精度的问题解决_java_脚本之家 (jb51.net)
  2. 版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    本文链接:http://www.miss168.net/detail/science/631252567581528064/0/844370244045639680
/**
 * WebMvc配置
 *
 * @author : JZDELD
 * @date : 2021/11/19 14:00
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();

        ObjectMapper objectMapper = new ObjectMapper();
        /**
         * 序列换成json时,将所有的long变成string
         * 因为js中得数字类型不能包含所有的java long值
         */
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
        objectMapper.registerModule(simpleModule);

        jackson2HttpMessageConverter.setObjectMapper(objectMapper);
        /**
         * 现在好多项目都用到了long型ID,如果不做处理,返回到前端的精度会丢失,为了解决这个方法,
         * 只能重写configureMessageConverters,很多人都遇到重写这个不生效的情况,都有分析原因,
         * 是因为有一个默认的消息转换器排在我们自定义的前面导致不生效,有的说加注解@EnableWebMvc,
         * 有的说定义一个Bean等等,知道原因后解决其实没那么复杂,我们只需要将自定义的消息转换器放到前边即可,
         * 下面是代码:
         */
        // index 0 关键  核心就在这里,把它添加到首位还担心他不生效吗
        converters.add(0, jackson2HttpMessageConverter);
    }
}

 

上一篇:Jackson中转换JsonNode(ArrayNode)到Java中的List对象


下一篇:简单学习一下Jackson