推薦博客地址:https://www.cnblogs.com/asker009/p/12888388.html
下面這種方法在使用中,發現json字符串傳到前端有時候莫名其妙多出來個屬性的,導致后端沒法解析。(我也不知道原因,逆向工程生成的vue的新增組件無法實現)
數據設計使用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);
}
}