場景
如下,在處理錢相關(guān)的業(yè)務(wù)時(shí),接口明明已經(jīng)保留了兩位小數(shù)1.00
,但前端接收的時(shí)候獲取的卻是1
,小數(shù)點(diǎn)后面的‘0’沒了。
@Data
public class UserVo {
long id;
String name;
BigDecimal money;
}
其實(shí),需要在BigDecimal
參與json
轉(zhuǎn)化時(shí),將其轉(zhuǎn)化成String
類型即可。
一. Jackson的處理方式
1.編寫一個(gè)類,實(shí)現(xiàn)JsonSerializer
,并實(shí)現(xiàn)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.在需要特殊處理的屬性上加上這個(gè)注解@JsonSerialize
,并將第一步創(chuàng)建好的類名加到參數(shù)中
@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);
}
- 看下測試結(jié)果,成功保留了對(duì)應(yīng)的小數(shù)位數(shù),并幫我們轉(zhuǎn)成了String類型,很完美
二. FastJson的處理方式
1.編寫一個(gè)類,實(shí)現(xiàn)ValueFilter
,并實(shí)現(xiàn)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.使用的時(shí)候需要在后面加上我們自定義的的類對(duì)象,如下文章來源:http://www.zghlxwxcb.cn/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);
}
- 打印結(jié)果
文章來源地址http://www.zghlxwxcb.cn/news/detail-481167.html
到了這里,關(guān)于json格式化BigDecimal,保留2位小數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!