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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Spring Data MongoDB中实现自定义级联的方法详解
这篇文章主要给大家介绍了关于Spring Data MongoDB中实现自定义级联的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。2017-11-11Java中BigDecimal的加减乘除、比较大小与使用注意事项
对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作,下面这篇文章给大家介绍了Java中BigDecimal的加减乘除、比较大小与使用注意事项,需要的朋友可以参考下。2017-11-11
最新评论