高防服务器

java中Long类型转为json后数据损失精度怎么办


java中Long类型转为json后数据损失精度怎么办

发布时间:2022-01-16 14:09:35 来源:高防服务器网 阅读:70 作者:小新 栏目:开发技术

这篇文章主要介绍了java中Long类型转为json后数据损失精度怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

在项目开发中,使用spring boot+mybatis的架构,数据库设计主键id时定义为bigint类型,使用mybatis的自动生成代码后没注意,主键在pojo里的类型为Long。查询时获取的对象列表取出的数值没有问题,但转为json传到前端后,id的数据始终不是数据库查出来的那个。

数据库表结构设计

AbumTip类

根据外键abum_id在数据库中查询的结果

Controller查到的结果

chrome浏览器preview结果

可以看到abumId(对应表abum_id)和tipId(对应表中tip_id)查询到的Long类型的数据都不对。

解决的方法

方法一

重新生成pojo对象,将所有数据库类型为bigint都映射成String类型。

方法二

对于使用springboot,则增加配置代码:

package com.gj.app.config;   import com.fasterxml.jackson.databind.ObjectMapper;  import com.fasterxml.jackson.databind.module.SimpleModule;  import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;  import org.springframework.context.annotation.Configuration;  import org.springframework.http.converter.HttpMessageConverter;  import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;  import org.springframework.web.servlet.config.annotation.EnableWebMvc;  import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;   import java.util.List;     @EnableWebMvc  @Configuration  public class WebDataConvertConfig extends WebMvcConfigurerAdapter {          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);          }  }

方法三

在spring MVC中

增加类:

其中LongToStringJsonConverter为自定义转换器

public class LongToStringJsonConverter extends ObjectMapper {      /**       *        */      private static final long serialVersionUID = 1683531771040674386L;         @Override      public ObjectMapper registerModule(Module module) {          SimpleModule simpleModule = new SimpleModule();          simpleModule.addSerializer(Long.class, ToStringSerializer.instance);          simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);          return super.registerModule(simpleModule);      }  }
  <mvc:annotation-driven  conversion-service="conversionService">          <mvc:message-converters>               <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">                   <property name="objectMapper">                        <!-- <bean class="com.fasterxml.jackson.databind.ObjectMapper">   -->                      <bean class="mypackage.LongToStringAdapter">                          <property name="dateFormat">                                <bean class="java.text.SimpleDateFormat">                                    <constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />                                </bean>                            </property>                        </bean>                    </property>             </bean>          </mvc:message-converters>        </mvc:annotation-driven>

感谢你能够认真阅读完这篇文章,希望小编分享的“java中Long类型转为json后数据损失精度怎么办”这篇文章对大家有帮助,同时也希望大家多多支持高防服务器网,关注高防服务器网行业资讯频道,更多相关知识等着你来学习!

[微信提示:高防服务器能助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

[图文来源于网络,不代表本站立场,如有侵权,请联系高防服务器网删除]
[