前端后接口对接时,如果后台的id或者其他字段使用了长整型Long,就很容易出现js丢失精度问题。用接口工具调用时,往往id返回都是对的,但是一到页面上,js就后缀000。

前端说返回的值有问题,F12看看!后端说没问题,Postman看看!

这是js支持的问题,解决这个问题的办法很显然,返回字符串即可。

怎么实现呢,你可以直接将vo对象的id改成String类型,但是会带来copyProperties的不便,所以见过很多人通过增加虚拟字段实现。下面是一个整体解决方案:(需要略微了解下Spring的消息序列化原理,譬如MappingJackson2HttpMessageConverter是干嘛的)

MainConfig(通常是主config类,@Configuration注解的,用来导入一些基础配置)增加MessageConvert的重写extendMessageConverters:

@Override

public void extendMessageConverters(List> converters) {

MappingJackson2HttpMessageConverter jacksonConverter = null;

for (HttpMessageConverter> converter : converters) {

if (converter instanceof MappingJackson2HttpMessageConverter) {

jacksonConverter = (MappingJackson2HttpMessageConverter) converter;

}

}

if (jacksonConverter != null) {

jacksonConverter.setObjectMapper(new CustomObjectMapper());

converters.add(jacksonConverter);

}

}

CustomObjectMapper的实现:

public class CustomObjectMapper extends ObjectMapper {

public CustomObjectMapper() {

super();

SimpleModule simpleModule = new SimpleModule();

simpleModule.addSerializer(Long.class, ToStringSerializer.instance);

simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);

registerModule(simpleModule);

}

}

这样,接口返回的时候,所有的长整型字段,会被当做字符串处理,自动加上双引号。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐