Java中json格式化BigDecimal保留2位小数

 更新时间:2023年09月22日 10:03:47   作者:小范同学_  
这篇文章主要给大家介绍了关于Java中json格式化BigDecimal保留2位小数的相关资料,BigDecimal是Java中的一个数学库,可以实现高精度计算,文中给出了详细的代码实例,需要的朋友可以参考下

场景

如下,在处理钱相关的业务时,接口明明已经保留了两位小数 1.00 ,但前端接收的时候获取的却是 1 ,小数点后面的‘0’没了。

@Data
public class UserVo {
    long id;
    String name;
    BigDecimal money;
}

其实,需要在 BigDecimal 参与 json 转化时,将其转化成 String 类型即可。

一. Jackson的处理方式

1.编写一个类,实现 JsonSerializer ,并实现 serialize 方法

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{
    @Override
    public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        if(o != null && o instanceof BigDecimal){
            BigDecimal bigDecomal = (BigDecimal) o;
            jsonGenerator.writeString(bigDecomal.setScale(2,BigDecimal.ROUND_DOWN)+"");
        }
    }
}

2.在需要特殊处理的属性上加上这个注解 @JsonSerialize ,并将第一步创建好的类名加到参数中

@JsonSerialize(using = BigDecimalSerialize.class)
BigDecimal money;

以下是在测试类中测试的场景

@Test
    public void jacksonFormat() throws JsonProcessingException {
        UserVo userVo = new UserVo();
        userVo.setMoney(new BigDecimal(1.000));
        ObjectMapper mapper = new ObjectMapper();
        String result=mapper.writeValueAsString(userVo);
        System.out.println("result = " + result);
    }

看下测试结果,成功保留了对应的小数位数,并帮我们转成了String类型,很完美

二. FastJson的处理方式

1.编写一个类,实现 ValueFilter ,并实现 process 方法

import com.alibaba.fastjson.serializer.ValueFilter;
import java.math.BigDecimal;
public class BigDecimalValueFilter implements ValueFilter {
	@Override
    public Object process(Object object,String name,Object value){
        if(null != value&&value instanceof BigDecimal){
            BigDecimal bigDecimal = (BigDecimal) value;
            return bigDecimal.setScale(5,BigDecimal.ROUND_DOWN).toString();
        }
        return value;
    }
}

2.使用的时候需要在后面加上我们自定义的的类对象,如下

JSON.parseObject(JSON.toJSONString(userVo, new BigDecimalValueFilter()))

同样测试下看看效果如何

@Test
    public void fastJsonFormat(){
        UserVo userVo = new UserVo();
        userVo.setMoney(new BigDecimal(1.000));
        JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(userVo, new BigDecimalValueFilter()));
        System.out.println("jsonObject = " + jsonObject);
    }

打印结果

总结

到此这篇关于Java中json格式化BigDecimal保留2位小数的文章就介绍到这了,更多相关json格式化BigDecimal内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JVM内存结构划分实例解析

    JVM内存结构划分实例解析

    这篇文章主要介绍了JVM内存结构划分实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • SpringBoot注解@ConditionalOnClass底层源码实现

    SpringBoot注解@ConditionalOnClass底层源码实现

    这篇文章主要为大家介绍了SpringBoot注解@ConditionalOnClass底层源码实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • jQuery 动画效果代码分享

    jQuery 动画效果代码分享

    本文给大家分享一段关于jquery实现的动画效果,代码简单易懂,非常不错,感兴趣的朋友参考下
    2016-11-11
  • MySQL text类型对应mybatis jdbcType类型方式

    MySQL text类型对应mybatis jdbcType类型方式

    这篇文章主要介绍了MySQL text类型对应mybatis jdbcType类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Java正则表达式匹配电话格式

    Java正则表达式匹配电话格式

    正则表达式是由普通的字符以及特殊字符组成的文字模式,用来在查找文字主体时待匹配的一个或多个字符串。本文给大家介绍java正则表达式匹配电话格式,对java正则表达式匹配相关知识感兴趣的朋友一起学习吧
    2015-11-11
  • 详谈HashMap和ConcurrentHashMap的区别(HashMap的底层源码)

    详谈HashMap和ConcurrentHashMap的区别(HashMap的底层源码)

    下面小编就为大家带来一篇详谈HashMap和ConcurrentHashMap的区别(HashMap的底层源码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 源码解析springbatch的job运行机制

    源码解析springbatch的job运行机制

    这篇文章主要介绍了springbatch的job是如何运行的,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • SpringCloud之微服务容错的实现

    SpringCloud之微服务容错的实现

    这篇文章主要介绍了SpringCloud之微服务容错的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Java将文件夹保留目录打包为 ZIP 压缩包并下载的教程详解

    Java将文件夹保留目录打包为 ZIP 压缩包并下载的教程详解

    这篇文章主要介绍了Java将文件夹保留目录打包为 ZIP 压缩包并下载的教程详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • spring boot 加载web容器tomcat流程源码分析

    spring boot 加载web容器tomcat流程源码分析

    本文章主要描述spring boot加载web容器 tomcat的部分,为了避免文章知识点过于分散,其他相关的如bean的加载,tomcat内部流程等不做深入讨论,具体内容详情跟随小编一起看看吧
    2021-06-06

最新评论