场景
如下,在处理钱相关的业务时,接口明明已经保留了两位小数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.使用的时候需要在后面加上我们自定义的的类对象,如下文章来源:https://www.toymoban.com/news/detail-481167.html
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);
}
- 打印结果
文章来源地址https://www.toymoban.com/news/detail-481167.html
到了这里,关于json格式化BigDecimal,保留2位小数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!