前端后接口对接时,若是后台的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<HttpMessageConverter<?>> 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); } }
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); } }
这样,接口返回的时候,全部的长整型字段,会被当作字符串处理,自动加上双引号。app