問題描述
在項目開發中,當實體類和表中定義的某個字段為 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 編碼規范,可以少踩很多坑,避免很多不必要的問題和麻煩。