一文詳解Java屬性為什么不能是is開頭的boolean
通常定義Java實體類時,對于boolean屬性,阿里規(guī)約中明確要求不能使用is開頭。
至于為什么,我們稍后再講。
這里先講一下前幾天在工作中,項目遇到的一個問題。庫表中某個字段存入了一個實體類的json字符串,在查詢庫表后,需要將json字符串轉(zhuǎn)為實體類對象進(jìn)行更改后再轉(zhuǎn)為json字符串后返回給前端。
在這當(dāng)中就出現(xiàn)了一個問題,庫表中存入的數(shù)據(jù)明明是isUpdate的字段,可是在返回到前端后的代碼就是update。
這個問題,起初并沒有想到是字段定義的問題,通過一步一步的debug,最后才發(fā)現(xiàn)是實體類中isUpdate字段的問題,在通過json解析后就轉(zhuǎn)成了update返回給了前端。
下面講一下,為什么會出現(xiàn)isUpdate變成update的問題。
首先,我們先定義一個Java實體類,包含一個is開頭的屬性,如isSuccess,再使用idea自動生成的get/set,看看是什么樣子。
public class IsEntity1 { private boolean isSuccess; public boolean isSuccess() { return isSuccess; } public void setSuccess(boolean success) { isSuccess = success; } }
然后再定義一個Java實體類,不是用is開頭的屬性,如success,再使用idea自動生成的get/set,看看是什么樣子。
public class IsEntity2 { private boolean success; public boolean isSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } }
此時,會發(fā)現(xiàn)無論你是用is開頭或者不用is開頭定義屬性,使用idea自動生成的get/set都是一個樣子的,而且在setSuccess的時候,會將is省略掉。這里就是項目中遇到的問題所在。
因為當(dāng)類進(jìn)行序列化時,有些框架的序列化會根據(jù)JavaBean的屬性進(jìn)行序列化,而部分框架是根據(jù)JavaBean的getter方法進(jìn)行序列化,這就會導(dǎo)致在反序列化時與實體類的屬性對應(yīng)不上。
比如說將IsEntity1轉(zhuǎn)換為json字符串時,會根據(jù)實體類中的get方法進(jìn)行序列化取isSuccess的值,而使用idea自動生成的get方法直接就是public boolean isSuccess()方法,在取值的時候會認(rèn)定success是字段名,就會取成success,與原來定義的字段不同。
如果非要使用is開頭來定義字段,怎么才能保證json解析過程是正確的呢
答案是自己寫get方法,不用idea自動生成的get方法。
如下:
public boolean getIsSuccess() { return isSuccess; }
這樣,再將實體類轉(zhuǎn)為json字符串時,就會認(rèn)定isSuccess是字段名。
還有一種方法,就是使用JSONField注解
@JSONField(name = "isSuccess") private boolean isSuccess;
雖然這些方法都可以解決json解析過程丟失is的問題,但是為了避免出現(xiàn)這種問題,我們最好還是遵守規(guī)約,不使用is開頭定義字段。
總結(jié)
到此這篇關(guān)于Java屬性為什么不能是is開頭的boolean的文章就介紹到這了,更多相關(guān)Java屬性不能是is開頭的boolean內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java之idea @NotNull @Nullable 注解使用
這篇文章主要介紹了Java之idea @NotNull @Nullable 注解使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01spring-data-redis連接操作redis的實現(xiàn)
spring-data-redis則是對Jedis進(jìn)行了高度封裝,使用起來非常方便。本文主要介紹了spring-data-redis連接操作redis的實現(xiàn),感興趣的可以了解一下2021-07-07SpringBoot實現(xiàn)多數(shù)據(jù)源的切換實踐
這篇主要介紹了SpringBoot實現(xiàn)多數(shù)據(jù)源的切換,本文基于AOP來實現(xiàn)數(shù)據(jù)源的切換,文中通過示例代碼介紹的非常詳細(xì),感興趣的小伙伴們可以參考一下2022-03-03Java實現(xiàn)Timer的定時調(diào)度函數(shù)schedule的四種用法
本文主要介紹了Java實現(xiàn)Timer的定時調(diào)度函數(shù)schedule的四種用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04SpringBoot實現(xiàn)多文件上傳的詳細(xì)示例代碼
文件上傳中并沒有什么太多的知識點,下面這篇文章主要給大家介紹了關(guān)于SpringBoot實現(xiàn)多文件上傳的詳細(xì)示例,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03使用Stargate訪問K8ssandra的過程之Springboot整合Cassandra
這篇文章主要介紹了使用Stargate訪問K8ssandra的過程之Springboot整合Cassandra,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-10-10