Java序列化Long類型數據到前端數據失真

Java序列化Long類型數據到前端數據失真

現象
項目中用到了唯一ID生成器.生成出的ID是long型的(比如說4616189619433466044).
通過某個rest接口中返回json數據後,發現瀏覽器解析完變成了4616189619433466000.

原因
大致描述:java中得long能表示的範圍比js中number大,也就意味着部分數值在js中存不下(變成不準確的值).

解決方法
方法就是不用number來保存long值,而是使用string.可以在客戶端js修改,
也可以在服務端序列化的時候修改.

方案1:

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
//序列化成String的傳

 @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

方案1:

@Configuration
public class WebAppConfig extends WebMvcConfigurerAdapter {
    @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);
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章