SpringMVC Jackson 庫解析 json 串屬性名大小寫自動轉換問題


問題描述

在項目開發中,當實體類和表中定義的某個字段為 RMBPrice,首字母是大寫的,sql 查詢出來的列名也是大寫的 RMBPrice,但是使用 jquery 的 ajax 返回請求響應時卻出錯,字段名變自動轉換成了小寫的 rmbprice 了。

問題分析

將服務器響應 ajax 請求的數據打印出來,字段名仍然是大寫的 RMBPrice 。所以,只可能是將 Java 對象轉換到 json 串發給客戶端的時候出了問題。

經過測試確實如此,即 第三方 jackson 庫在解析 Java 對象為 json 串規則如下:

當Java 對象屬性名的前幾個字母都是大寫的字母時,都自動會轉換成小寫,直到不是大寫為止,若小寫后面還有大寫,則保持大寫。

舉例:
RRRddRRR 會自動轉換為 rrrddRRR ;所以,按照以上規則,RMBPrice 會自動轉換為 rmbprice。

解決辦法

方法一:

將 RMBPrice 按照自動轉換規則直接改為 rmbprice 即可;但是,這樣變量名看起來不是很舒服

方法二:
  • 使用第三方 jackson 庫時

使用 @JsonProperty("屬性名") 注解

@JsonProperty("RMBPrice") 
private String RMBPrice;

這個注解的作用就是告訴 jackson 解析 json 串時直接使用注解定義的屬性名。

注意:SpringMVC 默認使用的是第三方庫 jackson 解析 Java 對象。

  • 使用第三方 fastjson 庫時
    使用 @JSONField(name = "屬性名") 注解
@JSONField(name = "Name") 
public String getName(){
  return name;
} 

注意: 該注解應該放在 get 方法前

總結

在實際項目開發時,一定要遵守 Java 編碼規范,可以少踩很多坑,避免很多不必要的問題和麻煩。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM