后端传Long类型的值给前端vue,导致精度丢失为问题的解决

数据设计使用bigint类型作为主键,Java后台使用Long类型进行接收。
在前端vue中调用后端的通过id查询方法,进行对数据库中的数据查询时,发现后端查询不到数据,后经发现:用psotman对后端的查询服务进行测试,无问题。
查看前端vue获取的数据id时,发现获取的数据id和数据库中的数据的ld不一致。所以才会导致查询查不到数据
由此引导出下面的问题:
javascript的 Number类型最大长度是17位;mysql使用bigint类型长度是20位;
解决办法:配置一个配置类。用于Java传值给前端进行JSON序列化时,将Long类型转成string类型序列化。

@Configuration
@EnableWebMvc
public class CustomJsonConfiguration 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);
        converters.add(jackson2HttpMessageConverter);
    }
}
GitHub 加速计划 / vu / vue
100
18
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:17 天前 )
9e887079 [skip ci] 11 个月前
73486cb5 * chore: fix link broken Signed-off-by: snoppy <michaleli@foxmail.com> * Update packages/template-compiler/README.md [skip ci] --------- Signed-off-by: snoppy <michaleli@foxmail.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 1 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐