数据设计使用bigint 类型作为主键,Java后台使用Long 类型进行接收。
在前端vue中调用后端的通过id查询方法,进行对数据库中的数据查询时,发现后端查询不到数据,后经发现:
用psotman对后端的查询服务进行测试,无问题。
查看前端vue获取的数据id时,发现获取的数据id和数据库中的数据的Id 不一致。
所以才会导致查询查不到数据
由此引导出下面的问题:
javascript 的 Number 类型最大长度是17位;
mysql 使用bigint 类型长度是20位;
解决办法:配置一个配置类。用于Java传值给前端进行JSON序列化时,将Long 类型转成string 类型序列化。
@Configuration
@EnableWebMvc
public class CustomJsonConfiguration implements WebMvcConfigurer {
@Override
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);
}
}