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