解决BigDecimal序列化后小数位的0被删除 sping boot用的2.5怎么统一配置处理
24条回答
关注获得0.45元问题酬金 引自免费微信小程序:皆我百晓生
在Spring Boot应用中,当您发现BigDecimal对象在序列化后小数位的零被删除时,这通常是由于JSON库(如Jackson)默认对数字格式化的方式导致的。要解决这个问题,您可以自定义Jackson的序列化设置,确保BigDecimal类型的小数部分保留足够的精度。
首先,创建一个自定义的
JsonSerializer来处理BigDecimal类型: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 BigDecimalSerializer extends JsonSerializer<BigDecimal> { @Override public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException { String formatted = value.toPlainString(); // 或者使用 `value.setScale(2, RoundingMode.HALF_UP).toPlainString()` 来设置固定的小数位数 gen.writeString(formatted); } }接下来,在Spring Boot中注册这个自定义序列化器,通常是在配置类中完成:
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import org.springframework.context.annotation.Configuration; @Configuration public class JacksonConfig { @Bean public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); SimpleModule module = new SimpleModule(); module.addSerializer(BigDecimal.class, new BigDecimalSerializer()); objectMapper.registerModule(module); return objectMapper; } }这样,您的BigDecimal对象在序列化为JSON字符串时就会保留小数位的0了。如果您希望全局统一处理所有BigDecimal类型的序列化行为,上述配置将会生效。不过,请注意,这种方式会影响到整个应用中所有的BigDecimal对象的序列化方式,如果只针对某些字段有此需求,则可以在对应的实体类属性上使用
@JsonSerialize(using = BigDecimalSerializer.class)注解进行精确控制。解决 无用评论 打赏 举报 编辑记录