问题描述
spring web项目提供给前端一个http接口,接口返回中存在一个Long类型属性phoneNum,如下:
public class User implements Serializable {
private static final long serialVersionUID = -7208500744108845919L;
private String name;
private Integer age;
private Long phoneNum;
但是通过测试发现,接口返回中phoneNum返回字符串,如下:
{
"code": 0,
"message": {
"name": "小明",
"age": 23,
"phoneNum": "1234567890"
}
}
问题分析
前端解析Long类型时,存在精度丢失的问题;所以服务端统一经Long类型转化为了String类型,代码配置如下:
@EnableWebMvc
@Configuration
public class WebDataConvertConfig implements WebMvcConfigurer {
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);
simpleModule.addSerializer(BigInteger.class, ToStringSerializer.instance);
......
}
}