關(guān)于@JsonProperty和@JSONField注解的區(qū)別及用法
@JsonProperty和@JSONField注解區(qū)別及用法
1. 目的
都是為了解決bean與json字段不一致問題,或者字段定義不符合前端所需要的標(biāo)準(zhǔn)
2. 區(qū)別
1.框架不同:
@jsonProperty是 Jackson的包,而@jsonfield是fastjson的包
2.用法不同:
(1)bean轉(zhuǎn)換成Json字符串:
@JsonProperty:ObjectMapper().writeValueAsString(Object value)@JSONField:ObjectMapper().readValue(String content, Class valueType)
(2)Json字符串轉(zhuǎn)化為bean:
@JsonProperty:ObjectMapper().readValue(String content, Class valueType)@JSONField:JSONObject.parseObject(String content, Class valueType)
(3)@JSONField這個(gè)注解可以用于get、set以及屬性上面
public class Test{
/*
注解在屬性上的時(shí)候可以設(shè)置一些序列化、格式化的屬性
@JSONField(serialize = false)---->序列化的時(shí)候忽略這個(gè)屬性
@JSONField(format = "yyyyMMdd")---->序列化和反序列化額時(shí)候使用yyyyMMdd,一般在Date類型的字段上使用
*/
@JSONField(serialize = false)
public String Name;
/*
注解在set方法表示json轉(zhuǎn)成bean的時(shí)候會(huì)將json中的Name屬性賦值給實(shí)體類的Name
*/
@JSONField(name="Name")
public void setName(String Name){
this.Name = Name;
}
/*
注解在get方法表示bean轉(zhuǎn)換成json的時(shí)候會(huì)把實(shí)體類的Name屬性值賦給json的Name
*/
@JSONField(name="Name")
public String getName(){
return this.Name;
}
}
(3)@JSONproperty這個(gè)注解用于屬性上面
如把trueName屬性序列化為name,可以在屬性名上面增加@JsonProperty(value=“name”)。
(4)jackson的@JsonIgnore使用
作用:在json序列化時(shí)將java bean中的一些屬性忽略掉,序列化和反序列化都受影響。
使用方法:一般標(biāo)記在屬性或者方法上,返回的json數(shù)據(jù)即不包含該屬性。
jsonField和jsonProperty注解的坑
遇到的問題:
實(shí)體類中的字段一般都是首字母小寫的,但是所要傳輸?shù)膉son數(shù)據(jù)(接收的和發(fā)出去的)都要求字段的首字母大寫
public class Test{
?? ?private String Name;------>setter + getter
}
json:
{
?? ?'Name': 'test'
}但是這樣直接接收的話是接收不到Name的取值的
所以需要使用jsonField注解和jsonProperty注解
@JSONField
這個(gè)注解分別可以注解在實(shí)體類的屬性、setter和getter方法上
public class Test{?? ?
?? ?/*
?? ??? ?注解在屬性上的時(shí)候可以設(shè)置一些序列化、格式化的屬性
?? ??? ?@JSONField(serialize = false)---->序列化的時(shí)候忽略這個(gè)屬性
?? ??? ?@JSONField(format = "yyyyMMdd")---->序列化和反序列化額時(shí)候使用yyyyMMdd,一般在Date類型的字段上使用
?? ?*/?? ?
?? ?@JSONField(serialize = false)
?? ?public String Name;
?? ?/*
?? ??? ?注解在set方法表示json轉(zhuǎn)成bean的時(shí)候會(huì)將json中的Name屬性賦值給實(shí)體類的Name
?? ?*/
?? ?@JSONField(name="Name")
?? ?public void setName(String Name){
?? ??? ?this.Name = Name;
?? ?}
?? ?/*
?? ??? ?注解在get方法表示bean轉(zhuǎn)換成json的時(shí)候會(huì)把實(shí)體類的Name屬性值賦給json的Name
?? ?*/
?? ?@JSONField(name="Name")
?? ?public String getName(){
?? ??? ?return this.Name;
?? ?}
}@JSONProperty
( 1 ) 此注解用于屬性上,作用是把該屬性的名稱序列化為另外一個(gè)名稱,
( 2 ) 如把trueName屬性序列化為name,@JsonProperty(value=“name”)
( 3 ) 類似@JSONField注解注在setter方法上
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot?Validation提示信息國(guó)際化配置方式
這篇文章主要介紹了SpringBoot?Validation提示信息國(guó)際化配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
JDBC連接數(shù)據(jù)庫(kù)步驟及基本操作示例詳解
這篇文章主要為大家介紹了JDBC連接數(shù)據(jù)庫(kù)步驟及基本操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
SpringBoot程序打包失敗(.jar中沒有主清單屬性)
在學(xué)習(xí)SpringBoot,打包SpringBoot程序后,在cmd運(yùn)行出現(xiàn)了 某某某.jar中沒有注清單屬性,本文就來介紹一下原因以及解決方法,感興趣的可以了解一下2023-06-06
Java實(shí)現(xiàn)簡(jiǎn)單圖形界面計(jì)算器
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單圖形界面計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
Java定時(shí)器通信協(xié)議管理模塊Timer詳解
這篇文章主要介紹了Java定時(shí)器通信協(xié)議管理模塊Timer,?Timer一般指定時(shí)器(通信協(xié)議管理模塊)人類最早使用的定時(shí)工具是沙漏或水漏,但在鐘表誕生發(fā)展成熟之后,人們開始嘗試使用這種全新的計(jì)時(shí)工具來改進(jìn)定時(shí)器,達(dá)到準(zhǔn)確控制時(shí)間的目的2022-08-08
如何利用Java輸出鏈表中倒數(shù)第k個(gè)結(jié)點(diǎn)
這篇文章主要給大家介紹了關(guān)于如何利用Java輸出鏈表中倒數(shù)第k個(gè)結(jié)點(diǎn)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-12-12
Java CharacterEncodingFilter過濾器的理解和配置案例詳解
這篇文章主要介紹了Java CharacterEncodingFilter過濾器的理解和配置案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08

