后台返回给前端json字段的大小写问题,Lombok的坑@Data,@Getter
Lombok的@Data注解踩坑,@Setter的大小寫問題
以前在處理前端請求的實體類的時候,都是用Lombok的@Data注解對實體類進行getter、setter以及toString的聲名,今天處理實體類的時候,發現生成的setter方法和Java Bean的命名規則不一致。(@Data的作用是為我們定義的字段添加Lombok的@ToString、@EqualsAndHashCode、 @Getter方法、@RequiredArgsConstructor 和 為非final字段添加@Setter)
我要生成getter、setter的字段是:
private List<Map<String,String>> yAxis;private List<XAxis> xAxis;在我使用@Data時生成的代碼和實際要生成的代碼比較如下:
//@Data生成的setter方法 setYAxis() setXAxis() //實際需要的setter方法 setyAxis() setxAxis()Java Bean的4種命名特殊規范中有一種情況:如果屬性名的第二個字母大寫,那么該屬性名直接用作 getter/setter 方法中 get/set 的后部分,就是說大小寫不變。例如屬性名為uName,方法是getuName/setuName。
字段的首字母大小寫發生了變化。這個變化意味著,我在使用@Data注解生成的getter方法得到的屬性值是"yaxis"和"xaxis",而實際上我需要的屬性值為"yAxis"和"xAxis",這也就導致了我返回給前端的數據,前端無法識別,從而出錯。
JavaBean getter/setter命名規范[特例]
一般JavaBean屬性以小寫字母開頭,駝峰命名格式,相應的 getter/setter 方法是 get/set 接上首字母大寫的屬性名。例如:屬性名為userName,其對應的getter/setter 方法是 getUserName/setUserName。
但是,還有一些特殊情況:
如果屬性名的第二個字母大寫,那么該屬性名直接用作 getter/setter 方法中 get/set 的后部分,就是說大小寫不變。例如屬性名為uName,方法是getuName/setuName。
如果屬性名的前兩個字母是大寫(一般的專有名詞和縮略詞都會大寫),也是屬性名直接用作 getter/setter 方法中 get/set 的后部分。例如屬性名為URL,方法是getURL/setURL。
如果屬性名的首字母大寫,也是屬性名直接用作 getter/setter 方法中 get/set 的后部分。例如屬性名為Name,方法是getName/setName,這種是最糟糕的情況,會找不到屬性出錯,因為默認的屬性名是name。
如果屬性名以"is"開頭,則getter方法會省掉get,set方法會去掉is。例如屬性名為isOK,方法是isOK/setOK。
需要注意的是有些開發工具自動生成的getter/setter方法,并沒有考慮到上面所說的特例情況,會導致bug的產生。
我們在定義JavaBean的屬性名時,應該盡量避免屬性名的頭兩個字母中任意一個為大寫以及屬性名以"is"開頭。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的后台返回给前端json字段的大小写问题,Lombok的坑@Data,@Getter的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【深度学习】手撕 CNN 之 AlexN
- 下一篇: Kaggle知识点:对比学习基础