jackson统一处理json对数字类型四舍五入精确到两位小数

一、工具类

package com.mdw.platform.orders.config;

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;
import java.math.RoundingMode;
import java.text.DecimalFormat;


/**
 * 格式化
 *
 * double 精确到小数点后两位
 * Date:     2019/10/15 11:58
 * title:title
 * @author ht
 */
public class CustomerDoubleSerialize extends JsonSerializer<Double> {

    /**
     * 原本这里是  ##.00 ,带来的问题是如果数据库数据为0.00返回“ .00 “经评论指正,改为0.00
     */
    private DecimalFormat df = new DecimalFormat("0.00");

    @Override
    public void serialize(Double arg0, JsonGenerator arg1, SerializerProvider arg2) throws IOException {
        if(arg0 != null) {
            BigDecimal bigDecimal = new BigDecimal(String.valueOf(arg0));
            df.setRoundingMode(RoundingMode.HALF_UP);
            //四舍五入。需要将数据转成bigDecimal, 否则会存在经度丢失问题
            String format = df.format(bigDecimal);
            double aDouble = Double.parseDouble(format);
            arg1.writeNumber(aDouble);//返回数字格式
        }
    }
}

二、 实现

对实体类加上@JsonSerialize(using = CustomerDoubleSerialize.class)

   import com.fasterxml.jackson.databind.annotation.JsonSerialize;
  
    /**
     * 提货费用
     */
    @JsonSerialize(using = CustomerDoubleSerialize.class)
    private Double pickUpCost;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一石激起千层浪,可这一颗石子落下,却如同一个漩涡,经久不散,无人能近,在我经历的六七年里,研发中心换过四、五位主导...
    写字的虎阅读 940评论 36 12
  • 今天助教表现真的太好,我在看最强大脑,她在我旁边小声念书,念最近很喜欢的《魔法拐杖》,自己一气儿念了三遍。 1、看...
    宛宛妈咪阅读 113评论 0 0
  • 网络安全 密钥 TLS/SSL是一个公钥与私钥的结构,它是一个非对称的结构。每一个服务器和客户端都有自己的公私密钥...
    人失格阅读 1,343评论 0 0
  • 做任何事情不能急于求成,做事情不能追求数量不要求质量,在质量没有保证的前提,数量再多也是无用功。看一切事物不能看表...
    Nicole肉肉儿阅读 181评论 0 0