關(guān)于@JSONField和@JsonFormat的使用區(qū)別說(shuō)明_第1頁(yè)
關(guān)于@JSONField和@JsonFormat的使用區(qū)別說(shuō)明_第2頁(yè)
關(guān)于@JSONField和@JsonFormat的使用區(qū)別說(shuō)明_第3頁(yè)
關(guān)于@JSONField和@JsonFormat的使用區(qū)別說(shuō)明_第4頁(yè)
關(guān)于@JSONField和@JsonFormat的使用區(qū)別說(shuō)明_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第關(guān)于@JSONField和@JsonFormat的使用區(qū)別說(shuō)明@JSONField和@JsonFormat的區(qū)別

@JSONField是阿里巴巴下fastjson下的,@JsonFormat是jackson下面的。

一、@JSONField的常用方式

1.1、name的用法:

實(shí)體類:

packagecom.xiaobu.entity;

importcom.alibaba.fastjson.annotation.JSONField;

importlombok.Data;

importjavax.persistence.*;

importjava.io.Serializable;

*@authorxiaobu

*@versionJDK1.8.0_171

*@dateon2025/12/419:00

*@descriptionV1.0

@Data

publicclassRolesimplementsSerializable{

privatestaticfinallongserialVersionUID=5775171105018867238L;

@JSONField(name=role_id)

@Column(name=RoleId)

privateIntegerRoleId;

@JSONField(name=role_desc)

@Column(name=RoleDesc)

privateStringRoleDesc;

}

測(cè)試類:

*@authorxiaobu

*@date2025/12/516:53

*@descprition表明json不區(qū)分大小寫都能轉(zhuǎn)換

*@version1.0

*beantoJSON:{role_desc:admin,role_id:8}

*需要轉(zhuǎn)換的json:{ROLE_DESC:ADMIN,ROLE_ID:8}

*RoleDesc:ADMIN

@Test

publicvoidtestJSONField(){

Rolesroles=newRoles();

roles.setRoleDesc(admin

roles.setRoleId(8);

StringjsonStr=JSONObject.toJSONString(roles);

System.out.println(beantoJSON:+jsonStr);

//改變json的key為大寫

jsonStr=jsonStr.toUpperCase();

System.out.println(需要轉(zhuǎn)換的json:+jsonStr);

roles=JSONObject.toJavaObject(JSONObject.parseObject(jsonStr),Roles.class);

System.out.println(RoleDesc:+roles.getRoleDesc());

}

1.2format的用法:

實(shí)體類:

*任務(wù)接收時(shí)間

@JsonFormat(pattern=yyyy-MM-dd,timezone=GMT+8)

@JSONField(format=yyyy-MM-dd)

@Column(name=TaskAcceptTime)

privateDateTaskAcceptTime;

*任務(wù)完成時(shí)間

@JsonFormat(pattern=yyyy-MM-ddHH:mm:ss,timezone=GMT+8)

@JSONField(format=yyyy-MM-dd)

@Column(name=TaskCompleteTime)

privateDateTaskCompleteTime;

測(cè)試類:

@Test

publicvoidfindByExample(){

Tasktask=newTask();

task.setTaskId(HYR08274-0804

Exampleexample=newExample(Task.class);

Example.Criteriacriteria=example.createCriteria();

if(StringUtils.isNotBlank(task.getTaskId())){

criteria.andLike(TaskId,%+task.getTaskId()+%

//TaskAcceptTime=MonAug0400:00:00CST2008,TaskCompleteTime=FriNov0700:00:00CST2008

ListTasktasks=taskMapper.selectByExample(example);

System.out.println(tasks);

//taskAcceptTime:2008-08-04,taskCompleteTime:2008-11-07

StringfastJsonStr=JSON.toJSONString(tasks);

System.out.println(fastJsonStr=+fastJsonStr);

ObjectMapperMAPPER=newObjectMapper();

try{

//TaskAcceptTime:2008-08-04,TaskCompleteTime:2008-11-0700:00:00

Stringujosn=MAPPER.writeValueAsString(tasks);

System.out.println(ujosn=+ujosn);

}catch(JsonProcessingExceptione){

e.printStackTrace();

}

@JsonFormat(pattern=yyyy-MM-dd,timezone=GMT+8)必須加上時(shí)區(qū)。

@JSONField(format=yyyy-MM-dd)

這兩個(gè)的作用都是格式化日期時(shí)間。且只能作用在日期時(shí)間上。

補(bǔ)充:前臺(tái)傳后臺(tái)

@DateTimeFormat(pattern=yyyy-MM-dd)

@JsonFormat與@DateTimeFormat用法及注意事項(xiàng)

@JsonFormat

@JsonFormat,使用該注解前需要添加jackson相關(guān)的依賴包

用于服務(wù)器傳給前端json數(shù)據(jù)時(shí)對(duì)Date類型時(shí)間進(jìn)行的格式化

@JsonFormat(pattern=yyyy-MM-ddHH:mm:ss,timezone=GMT+8)

pattern就表示需要轉(zhuǎn)變的格式,timezone表示處在的時(shí)區(qū)(國(guó)內(nèi)是東八區(qū))

因?yàn)?,jackson在序列化時(shí)間時(shí)是按照國(guó)際標(biāo)準(zhǔn)時(shí)間GMT進(jìn)行格式化的,而在國(guó)內(nèi)默認(rèn)時(shí)區(qū)使用的是CST時(shí)區(qū),兩者相差8小時(shí)

如果沒(méi)有用@JsonFormat對(duì)時(shí)間進(jìn)行格式化,返回給前端的將是一個(gè)時(shí)間戳。如圖所示。

使用了@JsonFormat之后,時(shí)間格式正確顯示。如圖所示。

@JsonFormat(pattern=yyyy-MM-ddHH:mm:ss,timezone=GMT+8)

注意事項(xiàng)

@JsonFormat(pattern=yyyy-MM-ddHH:mm:ss,timezone=GMT+8)

pattern中定義的格式的大小寫要注意,不要寫錯(cuò)。。。

@DateTimeFormat

@DateTimeFormat是spring的注解,spring工程下不在需要額外引入其他依賴

由于客戶端傳給服務(wù)端的時(shí)間參數(shù)是字符串類型,如果直接使用java.util.Date下的Date接受的話,會(huì)報(bào)400的異常(400異常表示服務(wù)器不處理該請(qǐng)求,多半是傳入的參數(shù)問(wèn)題)

可以使用@DateTimeFormat將客戶端發(fā)送過(guò)來(lái)的時(shí)間參數(shù)轉(zhuǎn)換成想要的類型

@DateTimeFormat(pattern=yyyy-MM-ddHH:mm:ss)

pattern定義需要轉(zhuǎn)換的格式(跟前面一樣。大小寫需要嚴(yán)格定義)

這樣

服務(wù)端就可以正確接收,打印的時(shí)間參數(shù)為

MonApr0116:26:25CST2025

注意:@JsonFormat與@DateTimeFormat只是定義時(shí)間參數(shù)在客戶端和服務(wù)端之間轉(zhuǎn)換格式,控制臺(tái)、Debug顯示的還是java.util.Date下的Date類型形式,如果想要轉(zhuǎn)換的話可以自己使用SimpleDateFormat

SimpleDateFormatsdf=newSimpleDateFormat(yyyy-MM-ddHH:mm:ss

一些特殊情況

如果使用pattern=yyyy-MM-dd接收上述客戶端的參數(shù)

@DateTimeFormat(pattern=yyyy-MM

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論