長整型Long返回到前端,js出現精度丟失怎麼辦

前端後接口對接時,若是後臺的id或者其餘字段使用了長整型Long,就很容易出現js丟失精度問題。用接口工具調用時,每每id返回都是對的,可是一到頁面上,js就後綴000。
前端說返回的值有問題,F12看看!後端說沒問題,Postman看看!
這是js支持的問題,解決這個問題的辦法很顯然,返回字符串便可。
怎麼實現呢,你能夠直接將vo對象的id改爲String類型,可是會帶來copyProperties的不便,因此見過不少人經過增長虛擬字段實現。下面是一個總體解決方案:(須要略微瞭解下Spring的消息序列化原理,譬如MappingJackson2HttpMessageConverter是幹嗎的)前端

  1. MainConfig(一般是主config類,@Configuration註解的,用來導入一些基礎配置)增長MessageConvert的重寫extendMessageConverters:後端

    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter jacksonConverter = null;
        for (HttpMessageConverter<?> converter : converters) {
            if (converter instanceof MappingJackson2HttpMessageConverter) {
                jacksonConverter = (MappingJackson2HttpMessageConverter) converter;
            }
        }
        if (jacksonConverter != null) {
            jacksonConverter.setObjectMapper(new CustomObjectMapper());
            converters.add(jacksonConverter);
        }
    }
  2. CustomObjectMapper的實現:
    public class CustomObjectMapper extends ObjectMapper {
    public CustomObjectMapper() {
        super();
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
        registerModule(simpleModule);
    }
    }

這樣,接口返回的時候,全部的長整型字段,會被當作字符串處理,自動加上雙引號。
長整型Long返回到前端,js出現精度丟失怎麼辦app

相關文章
相關標籤/搜索