Skip to content

BigDecimal Serializer

java
package cn.ayyyya.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.text.DecimalFormat;

/**
 * @author yang
 * @since 1.0.0
 * date 2025/10/11
 * desc
 */
public class BigDecimalSerializer extends JsonSerializer<BigDecimal> {

    private static final DecimalFormat df = new DecimalFormat("0.00"); // Format to two decimal places

    @Override
    public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        if (value != null) {
            // Format BigDecimal value and write it as a string
            // 输出格式为0.00
            // gen.writeString(value.setScale(2, RoundingMode.HALF_UP).toString());
            gen.writeNumber(df.format(value));
        }
    }
}

class中局部使用

java
    @Data
    public static class R {
        @JsonFormat(shape = JsonFormat.Shape.NUMBER)
        @JsonSerialize(using = BigDecimalSerializer.class)
        private BigDecimal oneTimeExpense;
    }

全局使用 json序列化配置

java
@Slf4j
public class JsonUtil {
    private static final ObjectMapper objectMapper = new ObjectMapper();


    static {
        module.addSerializer(BigDecimal.class, new BigDecimalSerializer());
        mapper.registerModule(module);

        SimpleModule module = new SimpleModule();
        module.addSerializer(BigDecimal.class, new BigDecimalSerializer());
        objectMapper.registerModule(module);
    }


   /**
     * 将对象转换为JSON字符串
     *
     * @param obj 对象
     * @return JSON字符串
     */
    public static String toJson(Object obj) {
        try {
            return objectMapper.writeValueAsString(obj);
        } catch (JsonProcessingException e) {
            log.error("对象转JSON失败", e);
            return "";
        }
    }
    
   /**
     * 将JSON字符串转换为指定类型的对象
     */
    public static <T> T fromJson(String json, Class<T> clazz) {
        if (!StringUtils.hasLength(json) || clazz == null) {
            return null;
        }

        try {
            return objectMapper.readValue(json, clazz);
        } catch (JsonProcessingException e) {
            log.error("Convert JSON string to object error. JSON: {}, Class: {}", json, clazz, e);
            return null;
        }
    }
}

测试代码

java
   
    @Test
    void contextLoads() {

        R r = new R();
        r.setOneTimeExpense(BigDecimal.valueOf(100.50));
        // Output: 100.50
        System.out.println(JsonUtil.toJson(r));

    }