jackson使用@JsonSerialize格式化BigDecimal解决.00不显示问题

简介: jackson使用@JsonSerialize格式化BigDecimal解决.00不显示问题

一、 问题

最近开发中使用BigDecimal这个数据类型 返回json数据时出现了点问题:

# 1.前端第一次保存的时候 穿过来的数据格式 
240.00
240.77
# 2. mysql数据库存储的数据格式(数据库字段已经设置了保留小数点后两位)
240
240.77
# 3. java程序中查看从数据库中查询的回来的数据格式:
240.00
240.77
# 4. 返回前端的json字符串里的数据格式:
240
240.77
# 4. 前端想要的json字符串里的数据格式:
240.00
240.77


由上面的一系列分析可知:要想解决这个根源在于返回json数据的时候需要将数据格式化。


二、解决方案:使用@JsonSerialize输出数据保留两位小数

步骤1.创建一个BigDecimal格式化工具

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.math.BigDecimal;
public class BigDecimalSerialize extends JsonSerializer<BigDecimal> {
    @Override
    public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializerProvider) throws IOException {
        if (value != null && !"".equals(value)) {
            gen.writeString(value.setScale(2, BigDecimal.ROUND_HALF_DOWN) + "");
        } else {
            gen.writeString(value + "");
        }
    }
}

步骤二:在返回的实体类对应的属性上加上注解:

@JsonSerialize(using = BigDecimalSerialize.class)
  private BigDecimal totalCost;

总结

这个方案可以统一解决json的Date日期类型,String类型。double类型。。。等等的序列化格式问题


@JsonSerialize正确使用 https://juejin.im/post/5c91ad28e51d4574ed4ee0a3


目录
相关文章
java regex 正则表达式 提取数字和去除数字,过滤数字,提取价格
java regex 正则表达式 提取数字和去除数字,过滤数字,提取价格
394 0
BigDecimal保留两位小数
本文介绍了BigDecimal保留两位小数的三种方法:`setScale`、`DecimalFormat`和`String.format`。其中,`setScale`可设置保留规则并返回BigDecimal类型值;`DecimalFormat`通过匹配规则返回字符串类型值;`String.format`为字符串自带方法,同样返回字符串类型值。此外,文章还对比了四种保留小数规则(如`00.00`、`#0.00`等),总结出`#0.00`是最适用的规则。附有详细代码示例与控制台打印结果,便于理解与实践。
2069 18
|
XML 人工智能 监控
SpringBoot实战:七种统计方法耗时的实现方式
在Spring Boot开发中,统计方法执行时间是性能优化的重要手段。本文介绍了七种实现方法耗时统计的技巧,包括手动使用StopWatch、AOP全局监控、自定义注解+切面、拦截器、Filter、Actuator+Micrometer集成以及事件监听等方式。每种方法适用于不同场景,开发者可根据需求选择合适的方案,从而更高效地定位性能瓶颈并提升系统响应速度。
1463 5
|
自然语言处理 搜索推荐 Java
Spring i18n:@LocaleResolver 和 @RequestToViewName 指南
国际化是设计支持多语言和区域适配的应用程序的关键,有助于扩大市场覆盖、提升用户体验。Spring 提供了丰富的内置支持,如 `MessageSource`、`LocaleResolver` 和 `RequestToViewNameTranslator`,帮助开发者高效实现多语言切换和区域设置管理。通过结合 `@LocaleResolver` 识别用户语言环境,并配合 `@RequestToViewNameTranslator` 动态渲染视图,可构建高度本地化、灵活且用户友好的全球应用。
421 2
Spring i18n:@LocaleResolver 和 @RequestToViewName 指南
|
Java API Spring
Java小抄 使用StopWatch输出执行耗时
通过本文的介绍,我们详细讲解了如何使用 `StopWatch` 类测量代码执行时间。`StopWatch` 提供了简单而强大的功能,帮助我们精确分析代码的性能瓶颈,优化程序效率。希望本文能帮助您更好地理解和应用 `StopWatch`,在实际开发中提高代码性能和质量。
2671 80
|
Java Spring
jwt解析方法找不到(Cannot resolve method ‘parseClaimsJws‘ in ‘JwtParserBuilder‘ )
解决Cannot resolve method ‘parseClaimsJws‘ in ‘JwtParserBuilder‘
|
Java Spring
JAVA中的注解可以继承吗?
JAVA中的注解可以继承吗?
1425 0
JAVA中的注解可以继承吗?
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
755 1
|
SQL Java 数据库连接
mybatisplus QueryWrapper or写法
# MyBatis-Plus QueryWrapper的OR写法详解 MyBatis-Plus是一款基于MyBatis的增强工具,提供了丰富的简化操作,使开发者能更高效地进行数据库操作。`QueryWrapper`是MyBatis-Plus中用于构建查询条件的一个核心类,支持多种条件组合,包括AND和OR条件。本文将详细介绍如何使用 `QueryWrapper`实现OR条件的查询。 ## QueryWrapper简介 `QueryWrapper`用于构建动态SQL查询条件,它封装了各种条件构造方法,使得查询条件的构建更加简洁和直观。`QueryWrapper`中提供了丰富的方法来支持多
3349 0
|
JSON 关系型数据库 MySQL
MySQL中GROUP_CONCAT与JSON_OBJECT、GROUP BY的巧妙结合:打造高效JSON数组汇总
MySQL中GROUP_CONCAT与JSON_OBJECT、GROUP BY的巧妙结合:打造高效JSON数组汇总
1018 1