關于@JSONField和@JsonFormat的使用區別說明_第1頁
關于@JSONField和@JsonFormat的使用區別說明_第2頁
關于@JSONField和@JsonFormat的使用區別說明_第3頁
關于@JSONField和@JsonFormat的使用區別說明_第4頁
關于@JSONField和@JsonFormat的使用區別說明_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第關于@JSONField和@JsonFormat的使用區別說明@JSONField和@JsonFormat的區別

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

一、@JSONField的常用方式

1.1、name的用法:

實體類:

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;

}

測試類:

*@authorxiaobu

*@date2025/12/516:53

*@descprition表明json不區分大小寫都能轉換

*@version1.0

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

*需要轉換的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(需要轉換的json:+jsonStr);

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

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

}

1.2format的用法:

實體類:

*任務接收時間

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

@JSONField(format=yyyy-MM-dd)

@Column(name=TaskAcceptTime)

privateDateTaskAcceptTime;

*任務完成時間

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

@JSONField(format=yyyy-MM-dd)

@Column(name=TaskCompleteTime)

privateDateTaskCompleteTime;

測試類:

@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)必須加上時區。

@JSONField(format=yyyy-MM-dd)

這兩個的作用都是格式化日期時間。且只能作用在日期時間上。

補充:前臺傳后臺

@DateTimeFormat(pattern=yyyy-MM-dd)

@JsonFormat與@DateTimeFormat用法及注意事項

@JsonFormat

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

用于服務器傳給前端json數據時對Date類型時間進行的格式化

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

pattern就表示需要轉變的格式,timezone表示處在的時區(國內是東八區)

因為,jackson在序列化時間時是按照國際標準時間GMT進行格式化的,而在國內默認時區使用的是CST時區,兩者相差8小時

如果沒有用@JsonFormat對時間進行格式化,返回給前端的將是一個時間戳。如圖所示。

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

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

注意事項

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

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

@DateTimeFormat

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

由于客戶端傳給服務端的時間參數是字符串類型,如果直接使用java.util.Date下的Date接受的話,會報400的異常(400異常表示服務器不處理該請求,多半是傳入的參數問題)

可以使用@DateTimeFormat將客戶端發送過來的時間參數轉換成想要的類型

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

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

這樣

服務端就可以正確接收,打印的時間參數為

MonApr0116:26:25CST2025

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

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

一些特殊情況

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

@DateTimeFormat(pattern=yyyy-MM

溫馨提示

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

評論

0/150

提交評論