最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot中JSON數(shù)值溢出問題的處理方案

 更新時間:2025年08月20日 09:37:40   作者:一勺菠蘿丶  
SpringBoot接口因JSON數(shù)值超出int范圍報錯,解決方案為:將字段改為Long、全局異常處理返回友好提示、添加數(shù)據(jù)校驗,推薦使用Long存儲大數(shù)值,避免溢出,本文通過代碼講解的非常詳細,需要的朋友可以參考下

一、問題背景:為什么我的接口突然報錯了?

假設你正在開發(fā)一個 Spring Boot 接口,接收類似這樣的 JSON 請求:

{
  "size": 111111111111111111111
}

然后突然收到用戶的反饋:請求報錯啦!

查看日志,發(fā)現(xiàn)一個刺眼的異常:

JSON parse error: Numeric value (111111111111111111111) out of range of int

翻譯成“人話”:

前端傳的 size 值太大,后端用 int 類型接收時,超出了 int 的范圍(-2147483648 ~ 2147483647),導致 JSON 解析失??!

二、為什么會發(fā)生這個錯誤?

1. Java 數(shù)據(jù)類型的“容量”限制

  • int 類型最大只能表示 2147483647。
  • 當 JSON 中的數(shù)值超過這個范圍時,int 裝不下,就會觸發(fā)溢出錯誤。

2. 誰在幕后“搞事情”?

  • Jackson 庫:Spring Boot 默認使用 Jackson 解析 JSON。
    當字段類型是 intInteger,但 JSON 數(shù)值過大時,Jackson 會直接拋異常!

三、解決方案:三步搞定

第一步:修改字段類型(治本)

直接將 size 的字段類型改為 Long,一步到位解決問題!

public class EsSearchResultRequest {
    private Long size;  // ? 改為 Long 類型
    // 其他字段...
}

為什么有效?

  • Long 的范圍是 -9223372036854775808 ~ 9223372036854775807,足夠容納超大數(shù)值。

第二步:全局異常處理(優(yōu)雅提示)

GlobalExceptionHandler 中捕獲異常,返回友好提示:

@ExceptionHandler(HttpMessageNotReadableException.class)
public ResponseEntity<String> handleHttpMessageNotReadable(HttpMessageNotReadableException ex) {
    String errorMessage = "請求參數(shù)格式錯誤,請檢查數(shù)值范圍";
    // 提取具體錯誤原因(可選)
    if (ex.getCause() instanceof JsonMappingException) {
        errorMessage = ex.getCause().getMessage(); 
    }
    return ResponseEntity.badRequest().body(errorMessage);
}

效果示例:

前端收到提示:

Numeric value (111111111111111111111) out of range of int

第三步:數(shù)據(jù)校驗(防御性編程)

如果業(yè)務要求 size 必須是較小的數(shù)值,可添加校驗邏輯:

public class EsSearchResultRequest {
    @Min(value = 1, message = "size 最小為 1")
    @Max(value = 1000, message = "size 最大為 1000")
    private Long size;
    // 其他字段...
}

校驗失敗時提示:

size 最大為 1000

四、擴展知識:為什么不用 Integer?

類型范圍推薦場景
int-2³¹ ~ 2³¹-1小數(shù)值(如狀態(tài)碼)
Long-2?³ ~ 2?³-1大數(shù)值(如 ID、時間戳)
BigInteger無限(內(nèi)存限制)天文數(shù)字

經(jīng)驗法則:

  • 不確定數(shù)值大小時,優(yōu)先用 Long
  • 永遠不要用 int 存儲可能超大的值!

五、常見問題 FAQ

1. 前端傳的是字符串,也會報錯嗎?

  • 不會!如果 JSON 中 size 是字符串 "111111111111111111111",需在后端用 String 類型接收,再手動轉(zhuǎn)換。

2. 數(shù)據(jù)庫字段類型需要改嗎?

  • 如果 size 要存到數(shù)據(jù)庫(如 MySQL),記得同步修改為 BIGINT,否則會插入失??!

3. 為什么異常處理要捕獲 HttpMessageNotReadableException?

  • 這是 Spring 在解析請求體失敗時拋出的“總異常”,涵蓋所有 JSON 解析錯誤(如類型不匹配、格式錯誤等)。

六、總結(jié):避坑指南

  1. 設計階段:根據(jù)業(yè)務場景選擇合適的數(shù)據(jù)類型。
    • 不確定時,無腦用 Long!
  2. 編碼階段
    • 添加數(shù)據(jù)校驗(如 @Min、@Max)。
    • 全局異常處理,返回友好提示。
  3. 協(xié)作階段
    • 告知前端參數(shù)范圍和格式要求。
    • 更新接口文檔,明確 size 的類型和限制。

到此這篇關(guān)于SpringBoot中JSON數(shù)值溢出問題的處理方案的文章就介紹到這了,更多相關(guān)SpringBoot JSON數(shù)值溢出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot 文件上傳大小配置的方法

    springboot 文件上傳大小配置的方法

    本篇文章主要介紹了springboot 文件上傳大小配置的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • SpringBoot實現(xiàn)國際化的教程

    SpringBoot實現(xiàn)國際化的教程

    這篇文章主要介紹了SpringBoot實現(xiàn)國際化的教程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • SpringBoot參數(shù)校驗@Validated、@Valid方式詳解

    SpringBoot參數(shù)校驗@Validated、@Valid方式詳解

    Spring?Boot中使用@Validated和@Valid進行參數(shù)校驗,確保數(shù)據(jù)的完整性和安全性,@Validated適用于分組校驗,而@Valid則更為通用,通過自定義注解和枚舉校驗注解處理類,可以實現(xiàn)更復雜的驗證邏輯
    2025-11-11
  • Spring MVC深度解析從原理到實戰(zhàn)(最新推薦)

    Spring MVC深度解析從原理到實戰(zhàn)(最新推薦)

    MVC是一種經(jīng)典的軟件架構(gòu)模式,本文給大家介紹Spring MVC深度解析從原理到實戰(zhàn),感興趣的朋友一起看看吧
    2025-05-05
  • java實現(xiàn)的各種排序算法代碼示例

    java實現(xiàn)的各種排序算法代碼示例

    這篇文章主要介紹了java實現(xiàn)的各種排序算法代碼示例,比較全面,代碼親測可用,如有不足之處,歡迎留言指出。
    2017-10-10
  • 利用Java生成指定時長的靜音WAV文件的實現(xiàn)方法

    利用Java生成指定時長的靜音WAV文件的實現(xiàn)方法

    在音頻處理的場景中,我們經(jīng)常需要生成一段純靜音的音頻文件,這種靜音片段可以用于音頻拼接、背景處理、語音合成間隔或后期混音中,本文將介紹如何僅使用 Java 標準音頻 API(javax.sound.sampled) 來生成一段指定時長的靜音 WAV 文件,需要的朋友可以參考下
    2025-11-11
  • mybatisplus如何實現(xiàn)排序

    mybatisplus如何實現(xiàn)排序

    這篇文章主要介紹了mybatisplus如何實現(xiàn)排序問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • SpringBoot整合Retry實現(xiàn)錯誤重試過程逐步介紹

    SpringBoot整合Retry實現(xiàn)錯誤重試過程逐步介紹

    重試的使用場景比較多,比如調(diào)用遠程服務時,由于網(wǎng)絡或者服務端響應慢導致調(diào)用超時,此時可以多重試幾次。用定時任務也可以實現(xiàn)重試的效果,但比較麻煩,用Spring Retry的話一個注解搞定所有,感興趣的可以了解一下
    2023-02-02
  • spring實例化javabean的三種方式分享

    spring實例化javabean的三種方式分享

    這篇文章介紹了spring實例化javabean的三種方式,有需要的朋友可以參考一下
    2013-10-10
  • IDEA 當前在線人數(shù)和歷史訪問量的示例代碼

    IDEA 當前在線人數(shù)和歷史訪問量的示例代碼

    這篇文章主要介紹了IDEA 當前在線人數(shù)和歷史訪問量的實例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08

最新評論

高邑县| 买车| 清流县| 横山县| 定州市| 青阳县| 即墨市| 屏山县| 衡阳县| 太仆寺旗| 东山县| 临江市| 北川| 肃南| 霞浦县| 康保县| 烟台市| 裕民县| 鄂州市| 新晃| 鹿邑县| 陇南市| 曲水县| 肥乡县| 宁陵县| 曲水县| 玉龙| 河源市| 海原县| 蒙城县| 衡南县| 水富县| 宿州市| 株洲市| 喜德县| 甘谷县| 广宗县| 军事| 九龙城区| 舞阳县| 九江市|