ycgyab 2024-03-30 18:10 采纳率: 0%
浏览 163
已结题

BigDecimal序列化后小数位的0被删除

解决BigDecimal序列化后小数位的0被删除 sping boot用的2.5怎么统一配置处理

  • 写回答

24条回答 默认 最新

  • 关注
    获得0.45元问题酬金

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    要解决BigDecimal序列化后小数位的0被删除的问题,可以通过以下方式统一配置处理:

    1. 在Spring Boot的配置文件(application.properties或application.yml)中设置Jackson的序列化特性:
    spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false
    spring.jackson.serialization.WRITE_BIGDECIMAL_AS_PLAIN=true
    

    这将确保BigDecimal类型字段被正确地序列化为字符串,保留小数位的0。

    1. 创建一个自定义序列化器来处理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 {
            gen.writeString(value.stripTrailingZeros().toPlainString());
        }
    }
    

    这个序列化器会将BigDecimal类型的字段转换成字符串,并保留小数位的0。

    1. 在需要保留小数位的0的BigDecimal类型字段上添加@JsonSerialize(using = BigDecimalSerializer.class)注解,或者在全局范围内配置使用该序列化器:
    import org.springframework.context.annotation.Configuration;
    import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
    
    @Configuration
    public class JacksonConfig {
    
        @Bean
        public Jackson2ObjectMapperBuilder jacksonBuilder() {
            Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
            builder.serializerByType(BigDecimal.class, new BigDecimalSerializer());
            return builder;
        }
    }
    

    这样,无论是在注解上还是在全局配置中,都会使用自定义的序列化器来处理BigDecimal类型。

    总结起来,解决BigDecimal序列化后小数位的0被删除的问题可以通过以下步骤:

    1. 在Spring Boot的配置文件中设置Jackson的序列化特性。
    2. 创建一个自定义序列化器来处理BigDecimal类型。
    3. 在需要保留小数位的0的BigDecimal类型字段上添加@JsonSerialize(using = BigDecimalSerializer.class)注解,或者在全局范围内配置使用该序列化器。
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月7日
  • 赞助了问题酬金15元 3月30日
  • 创建了问题 3月30日

悬赏问题

  • ¥15 关于移动机器人坐标计算
  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法