SpringBoot
关于雪花算法ID问题
Redis 缓存穿透、缓存击穿、缓存雪崩
分布式锁与单服务事务
分布式锁与分布式事务
SpringBoot 返回 BigDecimal ,数值太小导致返回科学计数法
本文档使用 MrDoc 发布
-
+
首页
SpringBoot 返回 BigDecimal ,数值太小导致返回科学计数法
针对使用 Jackson 返回 1、自定义ObjectMapper替换 或 自定义 MappingJackson2HttpMessageConverter 或 便利现有 messageConverters 进行 objectMapper 配置 2、配置 objectMapper configure(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN,true); 3、针对替换不生效可自行搜索类似文章或关键字 springboot - Spring Boot ObjectMapper 配置不生效问题 - 个人文章 - SegmentFault 思否 https://segmentfault.com/a/1190000041997183 针对使用 Fastjson返回 1、自定义 FastJsonHttpMessageConverter ,放置list首位或,移除其他 json messageConverter 2、配置 fastJsonConfig SerializerFeature.WriteBigDecimalAsPlain //防止科学计数法 ``` import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.math.BigDecimal; import java.util.List; /** * */ @Slf4j @Configuration public class WebAppConfig implements WebMvcConfigurer { // @Bean // @Primary // public ObjectMapper objectMapper() { // ObjectMapper objectMapper = new ObjectMapper(); // objectMapper.configure(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN,true); // //objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); // return objectMapper; // } /** * 更改全局fastjson配置 * @param converters */ @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { // 清除默认json转换器 //converters.removeIf(converter -> converter instanceof MappingJackson2HttpMessageConverter); // MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); // ObjectMapper objectMapper = new ObjectMapper(); // objectMapper.configure(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN,true); // objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); // mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper); // converters.clear(); // converters.add(mappingJackson2HttpMessageConverter); if(CollectionUtils.isNotEmpty(converters)){ converters.stream().filter(e->e instanceof AbstractJackson2HttpMessageConverter).forEach(m->{ ((AbstractJackson2HttpMessageConverter) m).getObjectMapper(). configure(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN,true); }); } // //1.需要定义一个convert转换消息的对象; // FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); // //2:添加fastJson的配置信息; // FastJsonConfig fastJsonConfig = new FastJsonConfig(); // fastJsonConfig.setSerializerFeatures( // SerializerFeature.WriteDateUseDateFormat, // SerializerFeature.WriteMapNullValue,//输出值为null的字段 // SerializerFeature.WriteNullStringAsEmpty,//字符类型字段如果为null,输出为”“,而非null // SerializerFeature.WriteNullListAsEmpty,//List字段如果为null,输出为[],而非null // SerializerFeature.DisableCircularReferenceDetect, // SerializerFeature.WriteBigDecimalAsPlain //防止科学计数法 // ); // //3处理中文乱码问题 // List<MediaType> fastMediaTypes = new ArrayList<>(); // fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); // //4.在convert中添加配置信息. // fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes); // fastJsonHttpMessageConverter.setObjectMapper(fastJsonConfig); // converters.add(fastJsonHttpMessageConverter); converters.forEach(e->{ log.info("HttpMessageConverter e = {}",e.getClass().getName()); }); } public static void main(String[] args) throws JsonProcessingException { ObjectMapper om = new ObjectMapper(); om.configure(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN,true); BigDecimal b = new BigDecimal("0.0000000000123"); String result = om.writeValueAsString(b); System.out.println(); } } ``` ```
admin
2026年1月6日 17:29
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码