自定义注解格式化处理BigDecimal

一、场景描述

        在开发过程中,如果有实体类的属性中存在BigDecimal的属性,并且需要对其进行校验,例如:限制BigDecimal的小数点位数是两位或者处理精度自动补0。但目前没有注解可以完成这个操作,因此我们可以使用下面的工具类和注解进行处理。

二、实现步骤

1、自定义类

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;


/**
 * 数字格式化字符串
 *
 * @author wheeyer.wu
 */
public class BigDecimalSerializer extends JsonSerializer {

    @Override
    public void serialize(BigDecimal value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        if (value != null) {
            String str = value.stripTrailingZeros().toPlainString();
            jsonGenerator.writeString(str);
        } else {
            jsonGenerator.writeString("");
        }
    }
}

2、使用注解

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.yl.basic.utils.BigDecimalSerializer;
import com.yl.translate.annotate.DateField;
import lombok.Data;

/**
 * 汇率
 */
@Data
public class CdBlExchangeRateDto implements Serializable{

	/**
     * 主键
     */
    private Integer jobId;

    /**
     * 源币种名称
     */
    private String fmCurrencyName;

    /**
     * 源币种编码
     */
    private String fmCurrencyCode;

    /**
     * 目标币种名称
     */
    private String toCurrencyName;


    /**
     * 目标币种编码
     */
    private String toCurrencyCode;

    /**
     * 汇率日期
     */
    private Date exchangeDate;

    /**
     * 汇率类型(公司、用户)
     */
    private String exchangeType;

    /**
     * 汇率
     */
    @JsonSerialize(using = BigDecimalSerializer.class)
    private BigDecimal exchangeRate;

   

}

你可能感兴趣的:(java,自定义注解)