后端傳Long類型的值給前端vue,導致精度丟失為問題的解決.c此方法在使用中出現了些問題詳細請看下文推薦的博客


推薦博客地址: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);
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM