昨天与前台联调时发现前台获取到的id不对,通过postman测试却没有问题,通过百度知道了是因为js没法显示17位以上的int类型。
由于前台是接受到的时候数据就失真了,所以前台这边没法修改,只能改java后端。
想到的方法就是传数据的时候不传BigInteger,而是传字符串。因为数据库中都是用的bigint,实体类(bean对象)也都是,从新改不太好也难免会出问题,于是就通过配置类的方式,在请求响应的时候吧BigInteger转为String了。这样就在不动之前代码的情况下解决数据失真问题了。
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.math.BigInteger;
import java.util.List;
@EnableWebMvc
@Configuration
public class WebJsonConverterConfig extends WebMvcConfigurerAdapter {
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(BigInteger.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
jackson2HttpMessageConverter.setObjectMapper(objectMapper);
converters.add(jackson2HttpMessageConverter);
}
}