SpringBoot全局配置long轉String 丟失精度


web項目中,前端JS使用Java后端傳過來的Long/long會丟失精度。
后端將返回的數據改為String使用即可

第一種

自己建個配置類
extends WebMvcConfigurerAdapter 已經被棄用,直接實現WebMvcConfigurer 該接口就行了

@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


@Configuration
public class JacksonConfig {
 
	/**
	 * Jackson全局轉化long類型為String,解決jackson序列化時long類型缺失精度問題
	 * @return Jackson2ObjectMapperBuilderCustomizer 注入的對象
	 */
	@Bean
	public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
		Jackson2ObjectMapperBuilderCustomizer cunstomizer = new Jackson2ObjectMapperBuilderCustomizer() {
			
			@Override
			public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
 
				jacksonObjectMapperBuilder.serializerByType(Long.TYPE, ToStringSerializer.instance);
				jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance);

			}
		};
		
		return cunstomizer;
	}

https://blog.csdn.net/u010616894/article/details/85467800

自己項目使用的時候,第二種未能生效。可能是由於不是使用的jackson2??。使用第一種可以,遂采用了第一種

參考鏈接


免責聲明!

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



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