1.今天后台使用實體類接收參數,然后有個參數發現明明前后都是對應的,但是那個屬性偏偏的不到數據
后面百度才知道(寫前端太久java基礎都給忘了,該補補了)
spring默認的命名方式為,首字母轉小寫,連續大寫字母都轉成了小寫
恍然大悟:也就是說當我實體類自動為SN時,get方法getSN也就相當於get,sn這個字段,set方法getSN也就相當於set,sn這個字段,就會導致跟字段SN不對應,導致無法注入值
這時候其實有解決的辦法,就是get,set方法添加@JsonPropety("屬性名")解決
Java的規范是首字母小寫的然后駝峰命名
看源碼后發現
public static String decapitalize(String s)
{
if(s == null || s.length() == 0)
//空處理
return s;
if(s.length() > 1 && Character.isUpperCase(s.charAt(1)) && Character.isUpperCase(s.charAt(0))){
//長度大於1,並且前兩個字符大寫時,返回原字符串
return s;
} else{
//其他情況下,把原字符串的首個字符小寫處理后返回
char ac[] = s.toCharArray();
ac[0] = Character.toLowerCase(ac[0]);
return new String(ac);
}
}
得出結論
當實體類的屬性為前兩個為大寫時他會返回原字符
AA->AA
Aa->aa
aa->aa
這樣的差異會導致set,get取不到對應的值,所以還是嚴格按照java的命名規范來
JavaBean 中的屬性是通過 get/set 方法名得來的,因此
getSname 對應的屬性名是 sname
getSName 對應的屬性名是 SName
如果寫成 sName 或者 Sname 的話就是不合法的屬性名。
在 Java 中要區分一下屬性(property)與字段(field)或成員變量(member variable)的區別。