精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Jackson在Spring Boot高級應用技巧【Long精度丟失, @JsonValue, 數(shù)據(jù)脫敏】

開發(fā) 前端
在Web開發(fā)中,使用JavaScript處理大數(shù)值(如Long類型)時,可能會遇到精度丟失的問題。這是因為JavaScript中的數(shù)字一律采用IEEE-754標準的64位浮點數(shù)表示,這種格式可以很好地處理大多數(shù)數(shù)字運算,但對于非常大的整數(shù)(超出2^53 - 1),就可能出現(xiàn)精度損失,這就非常的惡心了,可能會讓你感到莫名其妙。

1.簡介

  • Long類型在前端缺失精度
  • @JsonValue序列化單個屬性值
  • 自定義注解的應用 

2. 實戰(zhàn)案例

2.1 Long精度丟失

在Web開發(fā)中,使用JavaScript處理大數(shù)值(如Long類型)時,可能會遇到精度丟失的問題。這是因為JavaScript中的數(shù)字一律采用IEEE-754標準的64位浮點數(shù)表示,這種格式可以很好地處理大多數(shù)數(shù)字運算,但對于非常大的整數(shù)(超出2^53 - 1),就可能出現(xiàn)精度損失,這就非常的惡心了,可能會讓你感到莫名其妙。當從后端獲取到Long類型的值并嘗試在前端展示時,如果該值超過了JavaScript安全整數(shù)范圍,那么顯示的結(jié)果可能不準確,如下示例:

@RestController
@RequestMapping("/longs")
public class LongController {


  @GetMapping("")
  public Map<String, Object> getData() {
    return Map.of("code", 0, "data", 123456789012345678L) ;
  }
}

接口返回了一個17位的Long類型數(shù)據(jù),我們先直接通過瀏覽器訪問,結(jié)果如下:

圖片圖片

我們看到了2個結(jié)果,瀏覽器顯示的是正確的,但是通過 Network 查看數(shù)據(jù)錯誤,接下來,我們再通過Ajax獲取數(shù)據(jù)。

function getData() {
  axios.get('http://localhost:8080/longs')
    .then(resp => {
      console.log(resp.data) ;
    }).catch((error) => {
      console.log(error) ;
    });
}

圖片圖片

在這種前后端分離的架構(gòu)下,千萬的小心,如果你返回的Long類型超過了前端number的范圍,那么將出現(xiàn)該問題。接下來要解決也是非常的簡單,我們只需要進行簡單的配置即可。

@Component
public class PackMapperCustomizer implements Jackson2ObjectMapperBuilderCustomizer {


  @Override
  public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
    jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance) ;
  }
}

這里我們將Long類型轉(zhuǎn)換為String類型。再次運行上面的代碼

圖片圖片

通過自定義 Jackson2ObjectMapperBuilderCustomizer 屬于全局的,項目中所有的Long都會被轉(zhuǎn)換為String進行輸出。這可能不是我們希望的,我們可能只是希望有針對的處理,這時候我們就可以通過注解的方式了,如下示例:

public class User {


  @JsonSerialize(using = ToStringSerializer.class)
  private Long id ;
  private String name ;
  // getters, setters
}

通過上面注解的方式就能針對性的控制輸出字段類型。

2.2 @JsonValue序列化單個屬性值

@JsonValue注解用于指示一個方法,該方法將被用來轉(zhuǎn)換對象為JSON值。通常,這個方法會返回一個基本類型或其包裝類的實例,或者是其他可以直接序列化為JSON的對象。使用 @JsonValue 可以簡化對象到JSON的轉(zhuǎn)換過程,使得特定屬性或計算結(jié)果能夠直接作為JSON輸出,而無需定義復雜的序列化邏輯。

現(xiàn)在有,如下的枚舉類:

public enum PaymentStatus {


  NO_PAY(0, "未支付"), PAID(1, "已支付") ;
  
  PaymentStatus(int code, String desc) {
    this.code = code ;
    this.desc = desc ;
  }
  private Integer code ;
  private String desc ;
  // getters, setters
}

當接口返回該枚舉類時,顯示如下:

@GetMapping("")
public PaymentStatus status() {
  return PaymentStatus.PAID ;
}

圖片圖片

輸出了枚舉的字符串形式,如果我們要顯示具體的code或者是desc,那么我們就可以使用 @JsonValue 注解。

@JsonValue
private String desc ;

在需要輸出的字段上添加 @JsonValue 注解即可。

圖片圖片

如果該注解應用到一個普通的Java Bean對象中的某個屬性時,如下示例:

public class User {


  @JsonSerialize(using = ToStringSerializer.class)
  private Long id ;
  @JsonValue
  private String name ;
}

這時候接口輸出的將是name屬性對應的值。

圖片圖片


2.3 自定義注解

有些時候,我們可能對輸出的某些字段要做特殊的處理在輸出到前端,比如:身份證號,電話等信息,在前端展示的時候我們需要進行脫敏處理,這時候通過自定義注解就非常的有用了。在Jackson中要自定義注解,我們可以通過@JacksonAnnotationsInside注解來實現(xiàn),如下示例:

自定義注解

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = SensitiveSerializer.class)
public @interface Sensitive {


  int start() default 0 ;
  
  int end() default 0 ;
  
  String mask() default "*" ;
}

自定義序列化處理器SensitiveSerializer

public class SensitiveSerializer extends JsonSerializer<String> implements ContextualSerializer {


  private Sensitive sensitive;


  @Override
  public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
    String val = value;
    if (sensitive != null && StringUtils.hasLength(val)) {
      String m = sensitive.mask();
      int start = sensitive.start();
      int end = sensitive.end();
      int totalLength = value.length();


      if (totalLength <= 2) {
        val = totalLength == 1 ? value + m : value.substring(0, 1) + m;
      } else if (totalLength <= 6) {
        val = value.substring(0, 1) + String.join("", Collections.nCopies(totalLength - 2, m))
            + value.substring(totalLength - 1);
      } else {
        int prefixLength = Math.min(start, totalLength - 1);
        int suffixLength = Math.min(end, totalLength - 1);


        if (prefixLength > totalLength) {
          prefixLength = totalLength / 2;
        }
        if (suffixLength > totalLength) {
          suffixLength = totalLength / 2;
        }


        int maskLength = Math.max(0, totalLength - (prefixLength + suffixLength));
        if (maskLength == 0) {
          prefixLength -= 2;
          suffixLength -= 2;
          maskLength = Math.max(2, totalLength - (prefixLength + suffixLength));
        }


        prefixLength = Math.min(prefixLength, totalLength - 1);
        suffixLength = Math.min(suffixLength, totalLength - 1);


        maskLength = totalLength - prefixLength - suffixLength;


        val = value.substring(0, prefixLength) + String.join("", Collections.nCopies(maskLength, m))
            + value.substring(totalLength - suffixLength);
      }
    }
    gen.writeString(val);
  }


  @Override
  public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property)
      throws JsonMappingException {
    sensitive = property.getAnnotation(Sensitive.class);
    return this;
  }
}

接下來,在輸出的Java Bean中使用上面的注解。

public class User {


  @JsonSerialize(using = ToStringSerializer.class)
  private Long id ;
  private String name ;
  @Sensitive(start = 6, end = 4)
  private String idCard ;
  @Sensitive(start = 4, end = 3)
  private String phone ;
  // getters, setters
}

最后,在前端展示結(jié)果如下:

圖片

敏感數(shù)據(jù)得到了脫敏處理。

責任編輯:武曉燕 來源: Spring全家桶實戰(zhàn)案例源碼
相關(guān)推薦

2023-12-13 10:36:38

Long算法代碼

2024-01-22 08:46:37

MyBatis數(shù)據(jù)脫敏Spring

2024-09-30 11:51:07

2025-01-13 12:46:31

SpringBootJacksonJSON

2025-01-21 08:10:00

2010-09-26 14:49:41

部署終端數(shù)據(jù)丟失防護

2010-06-22 15:46:52

數(shù)據(jù)安全丟失防護

2022-06-23 08:42:08

配置加密解密

2022-06-27 08:16:34

JSON格式序列化

2017-09-20 09:46:38

Spring BootSpring Clou內(nèi)存

2025-06-18 02:12:00

2025-08-04 02:25:00

2019-07-15 16:00:24

Docker架構(gòu)容器

2019-07-15 10:00:53

DockerJava容器

2024-09-12 13:13:58

2024-09-09 05:30:00

數(shù)據(jù)庫Spring

2025-08-01 02:00:00

BigDecimal精度計算

2024-10-25 14:39:26

BigDecimal精度數(shù)值

2024-10-07 08:40:56

Spring應用程序Java

2025-06-27 07:46:53

點贊
收藏

51CTO技術(shù)棧公眾號

亚洲毛片在线观看.| 亚洲午夜在线电影| 成人福利视频在线观看| 九九热国产在线| 美女毛片一区二区三区四区| 欧美三电影在线| 毛片在线视频观看| 毛片免费在线观看| 国产精品中文字幕欧美| 午夜欧美大片免费观看| 亚洲区免费视频| 三级欧美日韩| 在线精品视频小说1| 日韩精品久久一区二区| 国际av在线| 东方aⅴ免费观看久久av| 国产精品欧美在线| 欧美一级视频免费观看| 亚洲深深色噜噜狠狠爱网站| 精品小视频在线| 色婷婷一区二区三区在线观看| 俺来也官网欧美久久精品| 国产精品久久毛片| 久久久久久久久久久久久9999| 国产精品久久久国产盗摄| 久久成人在线| 国内精品伊人久久| 亚洲最大的黄色网址| 国产成人影院| 亚洲精品国产精品乱码不99按摩 | 精品视频一区二区| 国产精品一级视频| 日本免费新一区视频| 97热精品视频官网| 久久黄色免费视频| 中文字幕一区二区三三 | 美国黄色特级片| 亚洲免费福利一区| 日韩精品免费电影| 国产精品久久无码| 大香伊人久久精品一区二区| 欧美一区二区精品在线| 91视频这里只有精品| 午夜无码国产理论在线| 欧美日韩在线免费| 欧美色图色综合| 色在线免费观看| 午夜精品国产更新| 日本丰满少妇xxxx| av中文字幕电影在线看| 亚洲一级二级三级| 久久久久久久9| 欧美日韩色网| 亚洲v日本v欧美v久久精品| 成人国产一区二区三区| 性欧美ⅴideo另类hd| 夜夜夜精品看看| a级免费在线观看| 123区在线| 午夜久久久久久久久| www在线观看免费| 自拍偷拍欧美视频| 91高清视频免费看| 日韩高清第一页| 成人福利片在线| 7777精品伊人久久久大香线蕉完整版| 911av视频| 免费一级欧美在线大片| 亚洲精品一线二线三线| 一区二区不卡免费视频| 久久91麻豆精品一区| 国产小视频国产精品| 992在线观看| 国内精品久久久久久久影视麻豆 | 久久免费播放视频| 亚洲激情欧美| 日本亚洲精品在线观看| 中文无码av一区二区三区| 精品一二线国产| 99精品欧美一区二区三区| 国产成人自拍一区| 久久蜜桃一区二区| 伊人久久大香线蕉av一区| 色综合999| 欧美视频二区36p| 69久久久久久| 99久久婷婷国产综合精品青牛牛| 亚洲国产古装精品网站| 蜜桃传媒一区二区亚洲av| 久久中文视频| 91精品国产91久久久久久最新 | 欧美成人r级一区二区三区| 五月天激情小说| 久久精品国产68国产精品亚洲| 色综合久综合久久综合久鬼88| 你懂的国产在线| 国产一区在线看| 欧美日韩综合精品| 日本大胆在线观看| 色婷婷av一区二区三区之一色屋| 中文字幕在线观看日| 美国十次av导航亚洲入口| 中文字幕日韩在线视频| 久久综合色综合| 奇米影视一区二区三区| 国产日韩一区欧美| 免费av网站在线观看| 欧美日韩国产在线| 男生和女生一起差差差视频| 国产成人精品三级高清久久91| 色综合91久久精品中文字幕 | 亚洲成人午夜在线| 草莓视频丝瓜在线观看丝瓜18| 欧美日韩免费高清一区色橹橹 | 中文字幕第一区第二区| 日韩a∨精品日韩在线观看| 99tv成人影院| 中文字幕亚洲第一| 日韩不卡视频在线| 成人在线一区二区三区| 一区不卡字幕| 亚洲mmav| 亚洲色图在线观看| 日韩污视频在线观看| 精品写真视频在线观看| 日本在线观看一区二区| 国产伦理精品| 精品少妇一区二区三区日产乱码 | 麻豆传媒在线观看| 欧美系列一区二区| 久久久久无码精品国产sm果冻 | 精品日本12videosex| 51午夜精品视频| 日本韩国在线观看| 一区二区三区视频在线观看| 国产成人在线综合| 首页国产精品| 国产一区在线播放| 国产高清视频在线| 91福利小视频| 蜜桃久久精品成人无码av| 亚洲尤物精选| 久久99精品久久久久久久青青日本 | 久久久精品区| 欧美另类第一页| 精品乱子伦一区二区| 尤物视频一区二区| 日本一二三区在线| 欧美午夜一区| 福利视频久久| 久草在线资源福利站| 亚洲国产精品成人精品| www..com国产| 久久亚洲影视婷婷| 99热这里只有精品在线播放| 精品国产一区二区三区久久久樱花| 国产成人精品亚洲精品| 国产小视频福利在线| 欧美午夜理伦三级在线观看| 日本黄色激情视频| 国产原创一区二区| 日韩成人三级视频| 女同另类激情重口| 国产成+人+综合+亚洲欧洲| 国内在线精品| 337p亚洲精品色噜噜噜| 黄色一级视频免费| 99久久精品99国产精品| 激情五月开心婷婷| 四虎成人精品永久免费av九九| 亚洲free性xxxx护士白浆| 国产天堂在线播放视频| 国产视频精品在线| 老熟妇一区二区三区啪啪| 中文字幕一区在线观看视频| 四川一级毛毛片| 一本久道综合久久精品| 日韩精品久久久| crdy在线观看欧美| 亚州国产精品久久久| 久草在线网址| 欧美一级片在线观看| 欧美一级视频免费观看| 国产精品美女久久久久高潮| 18禁一区二区三区| 久久精品国产清高在天天线| 一级日韩一区在线观看| 黑色丝袜福利片av久久| 国产精品露脸av在线| 91精品久久| 亚洲美女www午夜| 国产喷水吹潮视频www| 精品国产精品三级精品av网址| 美国黑人一级大黄| 成人性生交大片免费看中文| 日本www.色| 黑人一区二区三区四区五区| 日韩精品一区二区三区色偷偷 | 狠狠色综合色区| 高清欧美日韩| 91av在线看| 亚洲奶水xxxx哺乳期| 亚洲深夜福利网站| 国产成人三级在线观看视频| 欧美日韩国产综合一区二区三区| 日韩无码精品一区二区三区| 亚洲欧美一区二区三区久本道91 | 日韩中字在线| 久久亚洲高清| 2023国产精华国产精品| 国产男女猛烈无遮挡91| 国产精品伦理| 高清视频欧美一级| av毛片在线免费| 搡老女人一区二区三区视频tv| 五月婷婷丁香六月| 日韩午夜av电影| 国产一区二区麻豆| 一本大道av伊人久久综合| 久久精品免费在线| 亚洲欧美日韩系列| 天天操天天摸天天舔| 国产校园另类小说区| 在线精品一区二区三区| 国产寡妇亲子伦一区二区| 欧美女同在线观看| 丝袜诱惑亚洲看片| av动漫免费看| av不卡免费看| 国产av天堂无码一区二区三区| 亚洲欧美偷拍自拍| 伊人婷婷久久| 成人在线一区| 日韩精品一区二区三区四区五区 | 成人免费高清视频在线观看| 国产伦精品一区二区三区妓女下载| 麻豆高清免费国产一区| 免费看a级黄色片| 久久免费高清| 农村妇女精品一二区| 免费在线成人| 日韩久久一级片| 久久精品系列| 在线视频日韩一区 | 触手亚洲一区二区三区| 日韩h在线观看| 四虎影视精品成人| 日韩成人激情视频| 爽爽视频在线观看| 国产丝袜一区二区三区免费视频| 神马电影在线观看| 亚洲欧洲日产国产网站| 黄色av网址在线免费观看| 亚洲午夜未满十八勿入免费观看全集| 免费成人av电影| 伊人久久久久久久久久| 日本在线免费| 九九热精品在线| 超碰在线网站| 国产成人涩涩涩视频在线观看| 桃花岛成人影院| 国产精品三级在线| www.欧美视频| 国产精品午夜av在线| 欧美调教网站| 小说区图片区图片区另类灬| 亚洲成av人电影| 欧美交换配乱吟粗大25p| 99成人免费视频| 可以免费观看av毛片| 麻豆国产欧美一区二区三区| av地址在线观看| 26uuu精品一区二区三区四区在线| 法国空姐电影在线观看| 国产精品国产精品国产专区不片| 中文字幕在线2021| 性做久久久久久| 日韩乱码一区二区三区| 欧美一区二区福利在线| 亚洲av成人无码久久精品老人 | 色呦呦网站在线观看| 97人人做人人爱| 国产精品伦一区二区| 成人做爰66片免费看网站| 自拍偷拍精品| 国产亚洲精品久久久久久久| 久久婷婷久久| 女人扒开双腿让男人捅 | 欧美日韩另类综合| 亚洲蜜桃视频| 超碰影院在线观看| 国产一区二区看久久| 国产老熟女伦老熟妇露脸| 亚洲国产高清在线| 日韩精品一区二区av| 欧美午夜精品久久久久久超碰| 亚洲第一色视频| 国产亚洲精品久久久久久777| 怡红院av在线| 国产精品久久久久免费a∨| 成人午夜三级| 吴梦梦av在线| 丝袜a∨在线一区二区三区不卡| 人妻精品久久久久中文字幕69| 久久美女艺术照精彩视频福利播放| 男人操女人的视频网站| 欧美午夜片在线观看| 四虎电影院在线观看| 欧美另类极品videosbest最新版本 | 成人亲热视频网站| 你微笑时很美电视剧整集高清不卡| 欧美 国产 精品| 免费的国产精品| 国产交换配乱淫视频免费| 一区二区在线观看免费 | 亚洲第一精品福利| 国产欧美黑人| 国产精品免费观看在线| 任你躁在线精品免费| 中文精品无码中文字幕无码专区| 另类欧美日韩国产在线| 欧美做受xxxxxⅹ性视频| 午夜精品视频一区| 亚洲经典一区二区三区| 免费av一区二区| 亚洲国产91视频| 亚洲7777| 秋霞午夜鲁丝一区二区老狼| 37p粉嫩大胆色噜噜噜| 黄色一区二区三区| 色婷婷av一区二区三区之红樱桃 | 456成人影院在线观看| 蜜桃免费一区二区三区| 在线视频精品| a级一a一级在线观看| 亚洲福利一区二区三区| 亚洲精品一区二区口爆| 欧美极度另类性三渗透| 日韩av综合| 激情五月六月婷婷| 国产成人综合在线观看| 免费在线黄色网| 日韩一区二区不卡| 色屁屁www国产馆在线观看| 96sao精品视频在线观看| 亚洲国产精品久久久天堂 | 欧美片网站免费| 天堂av在线中文| 国产精品亚洲一区二区三区妖精 | 亚洲免费网站| 一区二区三区四区免费| 欧洲色大大久久| 在线观看麻豆| 亚洲free嫩bbb| 韩国久久久久| 精品夜夜澡人妻无码av| 色噜噜夜夜夜综合网| 高清毛片在线看| 91网站在线看| 在线精品观看| 一区二区三区伦理片| 欧美亚洲综合久久| 黄色精品在线观看| 99精品国产一区二区| 夜夜嗨网站十八久久| 国产精品九九九九九| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 日本一级片免费看| 亚洲男人的天堂在线| 精品美女一区| 性高湖久久久久久久久aaaaa| 9色porny自拍视频一区二区| 一本一道无码中文字幕精品热| 亚洲一级免费视频| 亚洲欧美在线综合| 成年人看的毛片| 国产欧美日韩在线| 99riav国产| 欧美亚洲成人网| 99视频精品全国免费| 人妻体内射精一区二区三区| 色悠悠久久综合| 最新av在线播放| 免费亚洲一区二区| 久久99精品久久久久久动态图 | heyzo在线播放| 色噜噜狠狠色综合网| 国产成人av网站| 久久人人爽人人爽人人片av免费| 美女视频黄免费的亚洲男人天堂| 精品深夜福利视频| jizzzz日本| 婷婷久久综合九色国产成人 | 色呦色呦色精品| 亚洲成在人线在线播放| 国产69久久| 国产伦精品一区二区三区免| 久久国产精品99精品国产| 日韩av电影网| 久久综合电影一区|