Springboot中Bigdecimal以json格式返回前端丢失小数点

在前端与后端交互过程中,使用BigDecimal处理精确数值时,可能会遇到JSON转换后丢失小数点的问题。通过将BigDecimal转换为String类型传递给前端,可以保持数据完整。需要注意,前端接收到的数据为String,进行计算时需先转换回数值类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在项目中遇到一个问题,前端传给我的数据用Bigdecimal来接收的,存入数据库decimal,查询结果也是用Bigdecimal接收的(例如:6.000000),结果以Json格式传到前端之后就没有小数点了(6.000000变成6),网上查了一下,有很多的方法,看着有点复杂,试了一些方法结果还是不行,最后自己倒腾了一下加了一个标签居然成功了,代码如下:

 

 这样就可以了,基本原理就是在把数据给前端的时候,把数据转换成string类型,这样就不会丢失小数点后面的(.000000)数据。需要注意的是,前端接收到的是string类型数据,如果涉及到数据计算问题,需要前端进行数据转换。

### 解决 Spring Boot 中 BigDecimal 返回前端时去掉小数点后两位为0的方法 在 Spring Boot 应用程序中,当 `BigDecimal` 对象返回前端时,默认情况下可能会显示不必要的零。为了确保这些多余的零被去除,可以通过多种方式实现。 #### 方法一:使用自定义序列化器 创建一个自定义的 Jackson 序列化器来控制 `BigDecimal` 的输出格式: ```java public class CustomBigDecimalSerializer extends JsonSerializer<BigDecimal> { @Override public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException { String strValue = value.stripTrailingZeros().toPlainString(); gen.writeString(strValue); } } ``` 接着,在需要应用此逻辑的地方注册该序列化器: ```java @JsonSerialize(using = CustomBigDecimalSerializer.class) private BigDecimal amount; ``` 这种方法允许灵活地调整特定字段的行为而不会影响整个应用程序[^2]。 #### 方法二:全局配置Jackson模块 另一种更通用的方式是在启动类或配置文件中添加全局设置,使得所有 `BigDecimal` 类型的数据都能按照预期格式发送到客户端: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Bean public Module customModule() { SimpleModule module = new SimpleModule(); module.addSerializer(new CustomBigDecimalSerializer()); return module; } @Override public void extendMessageConverters(List<HttpMessageConverter<?>> converters) { ObjectMapper objectMapper = ((MappingJackson2HttpMessageConverter)converters.stream() .filter(c -> c instanceof MappingJackson2HttpMessageConverter).findFirst().get()) .getObjectMapper(); objectMapper.registerModule(customModule()); super.extendMessageConverters(converters); } } ``` 上述代码片段展示了如何通过扩展默认的消息转换器并注入新的 Jackson 模块来达到目的[^3]。 对于那些希望简化开发过程的人而言,还可以考虑编写一个简单的工具函数用于手动调用,尤其是在不需要每次都自动处理的情况下非常有用。不过需要注意的是这种方式不如前两种优雅,并且可能增加维护成本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值