Java中json格式化BigDecimal保留2位小数
场景
如下,在处理钱相关的业务时,接口明明已经保留了两位小数 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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot注解@ConditionalOnClass底层源码实现
这篇文章主要为大家介绍了SpringBoot注解@ConditionalOnClass底层源码实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-02-02
MySQL text类型对应mybatis jdbcType类型方式
这篇文章主要介绍了MySQL text类型对应mybatis jdbcType类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-07-07
详谈HashMap和ConcurrentHashMap的区别(HashMap的底层源码)
下面小编就为大家带来一篇详谈HashMap和ConcurrentHashMap的区别(HashMap的底层源码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-08-08
Java将文件夹保留目录打包为 ZIP 压缩包并下载的教程详解
这篇文章主要介绍了Java将文件夹保留目录打包为 ZIP 压缩包并下载的教程详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-08-08
spring boot 加载web容器tomcat流程源码分析
本文章主要描述spring boot加载web容器 tomcat的部分,为了避免文章知识点过于分散,其他相关的如bean的加载,tomcat内部流程等不做深入讨论,具体内容详情跟随小编一起看看吧2021-06-06


最新评论