成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Springboot全局配置實現BigDecimal返回前端去除小數點后多余的零

開發 架構
本篇博客介紹了兩種解決方式!可以對BigDecimal類型進行格式化,去除前端展示中多余的0。這樣能夠優化前端展示效果,提高用戶體驗。這個兩個方法都簡單易用,而且具有通用性,適合大部分項目使用。

一、前言

我們在使用BigDecimal來記錄數值時,經常會有一個問題,就是小數點后多余的0!

當前如果你們是金額,保留兩位小數,展示多余的0是沒有問題的!可以看一下銀行卡是會顯示到分的!

小編的這里不是這種的,是要求保留八位小數,即使前端輸入100.1。保存到數據庫時就會變為:100.10000000,前端查詢出來肯定就是100.10000000。非常的臃腫,我們就需要去掉一下!

二、解決方案

分為兩種方案:

  • 按需進行去除0。
  • 全局BigDecimal全部去除0。

各有各的優缺點,就是看你們系統的要求了!

小編這里是有的允許保留0的,不需要的咱們單獨處理。所以咱們先演示第一種!

1、第一種方案

「編寫自定義序列化器:BigDecimalSerializer」

/**
 * BigDecimal序列化器
 * @author wangzhenjun
 * @date 2023/5/17 16:29
 */
public class BigDecimalSerializer extends JsonSerializer<BigDecimal> {

 @SneakyThrows
 @Override
 public void serialize(BigDecimal bigDecimal, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) {
  if (null != bigDecimal ) {
   String plainString = bigDecimal.stripTrailingZeros().toPlainString();
   jsonGenerator.writeString(plainString);
  } else {
   jsonGenerator.writeString(BigDecimal.ZERO.toPlainString());
  }
 }
}

在需要的對象上添加注解@JsonSerialize即可:

/**
 * @author wangzhenjun
 * @date 2023/5/17 16:51
 */
@Data
public class Big {

    @JsonSerialize(using = BigDecimalSerializer.class)
    private BigDecimal price;
}

測試一下:

@GetMapping("/big")
public Result big(){
    Big big = new Big();
    big.setPrice(new BigDecimal("1.20"));
    return Result.success(big);
}

圖片

我們可以看到正常的去除多余的0,我們會發現原來的BigDecimal變為了字符串,其實這個也是正常的,在我們系統里會配置上,把Long和BigDecimal返回前端的時候都會變為字符串,防止精度丟失。

想詳細了解的可以看看文章,趕時間的,小編在下面給出來了,添加一個配置類即可!

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(ObjectMapper.class)
@AutoConfigureBefore(JacksonAutoConfiguration.class)
public class JacksonConfiguration {

 @Bean
 @ConditionalOnMissingBean
 public Jackson2ObjectMapperBuilderCustomizer customizer() {
  return builder -> {
   builder.locale(Locale.CHINA);
   builder.timeZone(TimeZone.getTimeZone(ZoneId.systemDefault()));
   // 設置日期格式
   builder.simpleDateFormat(DatePattern.NORM_DATETIME_PATTERN);
   // 解決long類型損失精度
   builder.serializerByType(Long.class, ToStringSerializer.instance);
   // 解決BigDecimal類型損失精度
   builder.serializerByType(BigDecimal.class, ToStringSerializer.instance);
   // 日期格式自定義類
   builder.modules(new PigJavaTimeModule());
  };
 }

}

2、第二種方式

我們只需要進行序列化的時候去除一下即可,這是全局的BigDecimal都會去除多余0,大家按需使用,以免造成不必要的事故!

/**
 * 全局序列化配置
 * @author wangzhenjun
 * @date 2023/5/19 17:11
 */
@Configuration
public class JacksonConfig {

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        SimpleModule module = new SimpleModule();
        module.addSerializer(BigDecimal.class, new JsonSerializer<BigDecimal>() {
            @Override
            public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
                if (value != null) {
                    gen.writeString(value.stripTrailingZeros().toPlainString());
                }
            }
        });
        objectMapper.registerModule(module);
        return objectMapper;
    }
}

我們再次測試,我把上一種方式的寫法去掉了哈!

圖片

我們可以看到也是沒有問題的哈!

圖片

三、總結

通過本篇博客的介紹,我們知道了兩種解決方式!可以對BigDecimal類型進行格式化,去除前端展示中多余的0。這樣能夠優化前端展示效果,提高用戶體驗。這個兩個方法都簡單易用,而且具有通用性,適合大部分項目使用。

當然,在實際開發中,還有很多其他的格式化方式和技巧可以使用,比如使用前端框架的過濾器、使用JavaScript的toFixed()函數等等。不過,無論使用哪種方式,我們要做到的是盡可能地避免前端展示中出現多余的0,保證用戶體驗。

最最重要的是符合業務要求!

希望本篇博客的介紹能夠對大家有所幫助。

責任編輯:姜華 來源: 小王博客基地
相關推薦

2010-10-25 15:37:04

Oracle函數

2010-04-27 11:24:31

Oracle小數點保留

2010-03-30 16:56:01

Oracle函數

2010-04-26 16:09:47

Oracle小數點

2009-07-24 14:16:11

小數點保留兩位ASP.NET

2022-12-19 15:28:31

JavaScrip字符串

2021-08-17 15:16:21

計算數據 技術

2010-09-17 13:01:18

雅虎云計算

2022-03-04 08:31:07

Spring異常處理

2015-07-17 10:46:00

數字鍵盤功能多樣

2019-08-12 09:36:49

2009-07-27 16:43:51

自定義Eclipse菜

2017-01-19 15:27:24

Android性能優化Lint

2015-09-21 13:41:47

高可用監控系統運維自動化

2021-05-07 08:20:52

前端開發技術熱點

2009-11-10 17:22:23

VB.NET Form

2021-08-20 16:24:16

算法圓周率技術

2023-11-10 17:04:33

2017-08-10 10:28:43

SpringBootSpring

2015-02-11 15:06:41

微信SDK
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 少妇久久久久 | 久热精品免费 | 免费观看一级视频 | 精品亚洲第一 | 97人人澡人人爽91综合色 | 超碰3| 久久国产精品一区二区三区 | av影音资源| 成人av网站在线观看 | 久久精品久久综合 | 日本一区二区高清不卡 | 成人国产精品久久久 | 在线观看成年人视频 | 午夜影院中文字幕 | 91文字幕巨乱亚洲香蕉 | 久久久久久精 | 日韩欧美国产一区二区三区 | 最新中文字幕第一页视频 | 黄色大片在线播放 | 亚洲综合一区二区三区 | 欧美一区二区三区 | 成年人精品视频在线观看 | 国产高清在线精品 | 精品国产亚洲一区二区三区大结局 | 亚洲第一av | 亚洲精品视频三区 | 国产日韩欧美 | 欧美精品福利 | 欧美日韩国产一区二区三区 | 欧美日韩精品 | 波多野结衣中文视频 | 欧美激情在线精品一区二区三区 | 在线中文视频 | 九九在线视频 | 久久久久国产一区二区三区四区 | 青青99| 国产自产c区 | 91国自产| 91伊人网 | 精品www| 免费成人在线网站 |