記錄jackson解析出錯

Jackson 屬性名大小寫 Bug 記錄

問題描述

在前后端交互過程中,前端傳遞的 JSON 字段名為駝峰風格(如 qTitle),后端 Java 實體類字段名也為駝峰(如 private String qTitle;)。
但在反序列化時,發現后端接收到的 qTitle 字段始終為 null,導致如 @NotBlank(message = "問卷標題不能為空") 校驗失敗。

現象

  • 前端請求體:
    {"qTitle": "2024年員工滿意度調查問卷",...
    }
    
  • 后端實體類:
    public class QuestionnaireCreateRequest {@NotBlank(message = "問卷標題不能為空")private String qTitle;// ...
    }
    
  • 實際后端接收到的 qTitle 字段為 null,觸發校驗異常。

排查過程

  1. 確認前后端字段名一致,均為駝峰。
  2. 查看 Jackson 源碼,定位到 legacyManglePropertyName 方法:
     /*** Method called to figure out name of the property, given * corresponding suggested name based on a method or field name.** @param basename Name of accessor/mutator method, not including prefix*  ("get"/"is"/"set")*/protected String legacyManglePropertyName(final String basename, final int offset){final int end = basename.length();if (end == offset) { // empty name, nopereturn null;}char c = basename.charAt(offset);// 12-Oct-2020, tatu: Additional configurability; allow checking that//    base name is acceptable (currently just by checking first character)if (_baseNameValidator != null) {if (!_baseNameValidator.accept(c, basename, offset)) {return null;}}// next check: is the first character upper case? If not, return as ischar d = Character.toLowerCase(c);if (c == d) {return basename.substring(offset);}// otherwise, lower case initial chars. Common case first, just one charStringBuilder sb = new StringBuilder(end - offset);sb.append(d);int i = offset+1;for (; i < end; ++i) {c = basename.charAt(i);d = Character.toLowerCase(c);if (c == d) {sb.append(basename, i, end);break;}sb.append(d);}return sb.toString();}
    
  3. 分析得出:
    • 如果屬性名第一個字母是小寫,第二個字母是大寫(如 qTitle),Jackson 會將整個屬性名轉為小寫(qtitle)。
    • 這導致 JSON 里的 qTitle 和 Java 字段 qTitle 匹配不上。

解決方案

  1. 推薦:避免使用單字母+大寫字母的屬性名。
    • 例如,將 qTitle 改為 questionTitle
  2. 如必須使用,添加 @JsonProperty 注解:
    @JsonProperty("qTitle")
    private String qTitle;
    
  3. 確保 Jackson 配置為默認大小寫敏感,命名策略為 LOWER_CAMEL_CASE
  4. 團隊命名規范建議:
    • 盡量使用完整單詞命名,避免單字母+大寫字母的駝峰風格。

總結

本次 bug 的根本原因是 Jackson 對屬性名的“遺留”處理邏輯,遇到小寫字母后緊跟大寫字母的屬性名時,會將整個屬性名轉為小寫,導致前后端字段無法正確映射。
建議統一命名規范,或使用 @JsonProperty 明確指定字段名,徹底規避此類問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83769.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83769.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83769.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

泰國數碼電商系統定制|3C產品詳情泰語化+售后管理,適配泰國數碼零售

隨著全球數字化的加速&#xff0c;電商行業正在迅速發展&#xff0c;尤其是以泰國為代表的東南亞市場。泰國不僅是一個擁有龐大消費者群體的市場&#xff0c;而且其日益增長的互聯網使用率和手機普及率使得數碼產品的銷售潛力巨大。在這樣的大背景下&#xff0c;針對泰國市場的…

59、定制化原理-SpringBoot定制化組件的幾種方式

59、定制化原理-SpringBoot定制化組件的幾種方式 在Spring Boot中&#xff0c;定制化組件的方式多樣&#xff0c;以下是幾種常見的方法及其原理&#xff1a; #### 修改配置文件 通過修改application.properties或application.yml文件&#xff0c;利用ConfigurationProperties注…

機器學習--分類

陽性&#xff08;Positive&#xff09;和陰性&#xff08;Negative&#xff09; 陽性&#xff08;Positive&#xff09; 正類&#xff1a;通常指的是我們關注的類別或事件&#xff1b;陰性&#xff08;Negative&#xff09; 負類&#xff1a; 指的是與陽性相反的類別或事件。…

三星MZQL2960HCJR-00BAL高性能固態硬盤控制器SSD云計算和高端存儲專用 電子元器件解析

MZQL2960HCJR-00BAL 電子元器件解析 1. 基本類型與功能 MZQL2960HCJR-00BAL 是 三星&#xff08;Samsung&#xff09; 推出的一款 企業級NVMe SSD主控芯片&#xff0c;屬于 高性能固態硬盤控制器&#xff0c;專為 數據中心、云計算和高端存儲 設計。 關鍵特性&#xff1a; 接…

Blender——建構、粒子、燈光、動畫

Blender是一款開源的三維建模和動畫軟件&#xff0c;可用于創建3D模型、動畫、渲染圖像和視頻&#xff0c;還支持雕刻、紋理繪制、粒子系統等功能。 建構篇&#xff1a; 基本操作&#xff1a; 視角的控制&#xff1a; 控制觀察視角: 鼠標中鍵 平移視圖: Shift鼠標中鍵 縮放視…

節日快樂啊

<section data-role"paragraph" class"_135editor"> <p> <br/> </p> </section> <p> 瑪哈特2025中國國際金屬成形展覽會邀請函 </p><style>* { margin: 0; …

PHP和Node.js哪個更爽?

先說結論&#xff0c;rust完勝。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最開始在蘇寧的時候寫了幾年php&#xff0c;當時覺得php真的是世界上最好的語言&#xff0c;因為當初活在舒適圈里&#xff0c;不愿意跳出來&#xff0c;就好比當初活在…

LeetCode - 387. 字符串中的第一個唯一字符

題目 387. 字符串中的第一個唯一字符 - 力扣&#xff08;LeetCode&#xff09; 思路 用哈希表統計每個字符出現的次數 創建一個 unordered_map<char, int>&#xff0c;遍歷字符串&#xff0c;把每個字符出現的次數存進去。 再遍歷字符串&#xff0c;找到第一個只出現…

python從環境變量和配置文件中獲取配置參數

前言 從環境變量和配置文件中獲取配置參數&#xff0c;相關庫&#xff1a; python-dotenv&#xff1a;第三方庫&#xff0c;需要使用pip安裝configparser&#xff1a;標準庫 代碼 test.ini [mysql] host "192.168.0.10" port 3306 user "root" pas…

HarmonyOS5 運動健康app(一):健康飲食(附代碼)

一、核心數據模型設計 代碼通過兩個接口構建了飲食管理的基礎數據結構&#xff1a; interface footItem {name: string; // 營養名稱&#xff08;蛋白質/碳水/脂肪&#xff09;weight: number; // 重量&#xff08;克&#xff09; }interface DietItem {name: string; // 食物…

MQ選型及RocketMQ架構總覽

一、什么是MQ MQ&#xff08;MessageQueue&#xff09; Message(消息)&#xff1a;消息是在不同進程之間傳遞的數據&#xff0c;這些進程可以在同一臺機器上&#xff0c;也可以在不同的機器上。 Queue&#xff08;隊列&#xff09;&#xff1a;隊列原意是指一種具有FIFO&#…

python與java的區別

java老程序員來學習python了&#xff0c;記錄一下兩種類型語言的區別&#xff1a; Python與Java變量類型對比 python里面定義變量不需要指定變量的數據類型&#xff0c;并且是可以修改成其他類型java里面定義變量要指定變量的數據類型&#xff0c;指定以后不可以修改成其他數據…

固件簽名技術深度解析:HSM模塊如何守護設備安全,CAS系統如何賦能產業升級

引言&#xff1a;數字時代的固件安全危機 在萬物互聯的今天&#xff0c;全球設備固件安全事件頻發&#xff1a;某汽車品牌因固件漏洞導致百萬車輛被遠程控制&#xff0c;某醫療設備廠商因固件篡改引發數據泄露&#xff0c;某工業控制系統因非法固件升級造成生產線癱瘓……這些…

修改Typora快捷鍵

代碼 的默認快捷鍵為&#xff1a; 這對我來說不太友好&#xff0c;太難按了&#xff0c;而且我電腦右邊的Ctrl鍵壞了&#xff0c;這意味著我只能一個左手去按這3個鍵的組合&#xff0c;這更是難上加難了&#xff0c;于是想到改一下快捷鍵&#xff0c;代碼塊 是Ctrl Shift K&…

Bellman-Ford算法(詳解版)

Bellman-Ford算法 Bellman-Ford算法是用來解決,對于有負權的圖的**單源最短路徑**.因為DJ算法不可以解決對于負權的圖,所以使用這個算法來求解.但是依舊不可以有負回路.因為負回路就沒有存在單源最短路徑這一說. BF的另一個重要的用途就是用來檢測**是不是存在負回路** 思路…

《HarmonyOSNext的ForEach數組渲染の核心玩法與避坑指南》

《HarmonyOSNext教學寶典&#xff1a;ForEach數組渲染全攻略與性能優化》 #HarmonyOS開發 #ArkTS實戰 #組件解析 &#x1f3af; ForEach組件完全指南&#xff1a;數組循環渲染核心機制 舉個栗子&#x1f330;&#xff1a; ForEach相當于智能印刷機&#xff0c;將數組元素自動轉…

單片機 - STM32F407 ADC 模式詳解:單次轉換、連續轉換、掃描模式、非掃描模式

STM32F407 ADC 模式詳解&#xff1a;單次轉換、連續轉換、掃描模式、非掃描模式 前言 在 STM32F407 中&#xff0c;ADC&#xff08;模數轉換器&#xff09;模塊常用于采集模擬信號&#xff0c;比如讀取光敏電阻、電壓、電流、溫度傳感器等。STM32 的 ADC 模式較多&#xff0c…

開源模型應用落地-工具使用篇-從零開始搭建Qdrant Web UI-可視化管理工具-Windows(十)

一、前言 Qdrant 是一個高性能的向量搜索引擎&#xff0c;廣泛應用于相似性搜索、推薦系統和大規模數據檢索等場景。雖然其原生 API 提供了強大的功能&#xff0c;但對于開發者和運維人員來說&#xff0c;缺乏直觀的可視化界面常常增加了使用門檻。為了解決這一問題&#xff0c…

高頻交易技術:訂單簿分析與低延遲架構——從Level 2數據挖掘到FPGA硬件加速的全鏈路解決方案

高頻交易技術&#xff1a;訂單簿分析與低延遲架構——從Level 2數據挖掘到FPGA硬件加速的全鏈路解決方案 一、引言&#xff1a;高頻交易的技術本質 1.1 速度即利潤的微觀戰場 數據揭示&#xff1a;據NYSE實測&#xff0c;每降低1微秒延遲可獲得年化$700-1500萬套利窗口&#…

基于生成對抗網絡(GAN)的圖像生成與編輯:原理、應用與實踐

前言 生成對抗網絡&#xff08;GAN&#xff09;是近年來深度學習領域中最具影響力的技術之一。自2014年由Ian Goodfellow等人首次提出以來&#xff0c;GAN已經在圖像生成、圖像編輯、風格轉換等多個領域取得了令人矚目的成果。GAN的核心思想是通過生成器&#xff08;Generator&…