web項目中,Java后端傳過來的Long/long類型,前端JS接收會丟失精度。
本文推薦第三、第四種方式
第一種方式
簡單粗暴,將所有的Lang類型,改為String,數據庫改成varchar類型;
第二種方式
自己建個配置類
extends WebMvcConfigurerAdapter 已經被棄用,直接實現WebMvcConfigurer該接口就行了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@EnableWebMvc @Configuration public class WebDataConvertConfig implements WebMvcConfigurer { 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); } |
第三種方式
使用Jackson2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@Configuration public class JacksonConfig { /** * Jackson全局轉化long類型為String,解決jackson序列化時long類型缺失精度問題 * @return Jackson2ObjectMapperBuilderCustomizer 注入的對象 */ @Bean public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder .serializerByType(Long. class , ToStringSerializer.instance) .serializerByType(Long.TYPE, ToStringSerializer.instance); } } |
第四種方式(缺點:將所有的數字類型都會轉為字符串)
bootstrap.yml添加以下配置:
1
2
3
4
5
6
7
8
|
spring: jackson: #將所有的number類型轉為String返回 generator: write_numbers_as_strings: true #格式化返回時間 yyyy-MM-dd HH:mm:ss date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 |
到此這篇關于SpringBoot全局配置long轉String丟失精度的問題解決的文章就介紹到這了,更多相關SpringBoot long轉String丟失精度內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/qq_44757149/article/details/117158087