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


目录
相关文章
|
fastjson
fastjson设置指定日期属性的格式化
fastjson默认将时间格式化为时间戳,如果我们想以时间字符串格式输出的话,暂提供两种方式 1.序列化器方式 声明DateJsonSerializer public class DateJsonSerializer implements Object...
6301 1
|
1月前
|
Java
java将Date类型转化为固定格式yyyyMMdd字符串
java将Date类型转化为固定格式yyyyMMdd字符串
77 0
|
11月前
|
Java
DecimalFormat的使用讲解数字格式化和demo(java小数控制,金额返回相关处理)
DecimalFormat的使用讲解数字格式化和demo(java小数控制,金额返回相关处理)
179 0
|
1月前
|
Java 数据安全/隐私保护
hutool 笔记二 类型转换工具 Convert
hutool 笔记二 类型转换工具 Convert
54 0
|
10月前
|
人工智能 前端开发
BigDecimal 校验格式
BigDecimal 校验格式
133 0
|
10月前
|
Java
Hutool实现日期时间获取、转换、格式化
Hutool实现日期时间获取、转换、格式化
1484 0
|
10月前
|
JSON Java 数据格式
SpringBoot Jackson Date类型格式设置
SpringBoot Jackson Date类型格式设置 一、背景说明 在使用SpringBoot+SpringMVC时,默认采用Jackson包来进行JSON转换。 在返回Date类型的数据时,Jackson会以时间戳的形式返回,而实际场景往往需要以yyyy-MM-dd HH:mm:ss这类日期或时间格式返回。
|
人工智能 Java
Java 获取当前日期并且实现日期的格式化
Java 获取当前日期并且实现日期的格式化
|
Java
Java:String.format格式化浮点数保留指定小数位输出字符串
Java:String.format格式化浮点数保留指定小数位输出字符串
197 0