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));
}