Java中注解@JsonFormat的用法詳解
一、@JsonFormat是什么?
通常日期格式都是以時(shí)間戳的形式存放在數(shù)據(jù)庫里,當(dāng)前端頁面通過接口查詢時(shí),我們會(huì)將一個(gè)對(duì)象的某些屬性查出來返回給頁面。
類似在實(shí)體類上加上改注解:

二、@JsonFormat參數(shù)講解
1.locale代表中國的意思:中國時(shí)間段
2.pattern寫的就是對(duì)于數(shù)據(jù)庫的時(shí)間段
- yyyy代表-年
- MM代表-月
- dd代表-日
- HH代表-時(shí)
- mm代表分
- ss代表-秒
3.TimeZone
TimeZone 表示時(shí)區(qū)偏移量,也可以計(jì)算夏令時(shí)。
在操作 Date, Calendar等表示日期/時(shí)間的對(duì)象時(shí),經(jīng)常會(huì)用到TimeZone;因?yàn)椴煌臅r(shí)區(qū),時(shí)間不同。
那么timezone加上GMT+8什么意思呢?
GMT 就是格林威治標(biāo)準(zhǔn)時(shí)間的英文縮寫(Greenwich Mean Time 格林尼治標(biāo)準(zhǔn)時(shí)間),是世界標(biāo)準(zhǔn)時(shí)間,gmt+8 是格林威治時(shí)間+8小時(shí),中國所在時(shí)區(qū)就是gmt+8 。
附:@JsonFormat 將枚舉序列化為對(duì)象
Java Enum
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum EmployeeType {
FullTime("Full Time"), PartTime("Part Time");
private String displayName;
EmployeeType(String displayName) {
this.displayName = displayName;
}
public String getDisplayName() {
return displayName;
}
}
public class Employee {
private String name;
private EmployeeType employeeType;
...
}
Main Class
public class ExampleMain {
public static void main(String[] args) throws IOException {
Employee employee = new Employee();
employee.setName("Amy");
employee.setEmployeeType(EmployeeType.PartTime);
System.out.println("-- before serialization --");
System.out.println(employee);
System.out.println("-- after serialization --");
ObjectMapper om = new ObjectMapper();
String jsonString = om.writeValueAsString(employee);
System.out.println(jsonString);
System.out.println("-- after deserialization --");
System.out.println(om.readValue(jsonString, Employee.class));
}
}
枚舉被序列化為了 JSON 對(duì)象,但無法反序列化。
-- before serialization --
Employee{name='Amy', employeeType=PartTime}
-- after serialization --
{"name":"Amy","employeeType":{"displayName":"Part Time"}}
-- after deserialization --
Exception in thread "main" com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `org.example.c27.EmployeeType` from Object value (token `JsonToken.START_OBJECT`)
at [Source: (String)"{"name":"Amy","employeeType":{"displayName":"Part Time"}}"; line: 1, column: 30] (through reference chain: org.example.c27.Employee["employeeType"])
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1601)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1375)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1280)
at com.fasterxml.jackson.databind.DeserializationContext.extractScalarFromObject(DeserializationContext.java:872)
at com.fasterxml.jackson.databind.deser.std.EnumDeserializer.deserialize(EnumDeserializer.java:199)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:324)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:187)
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4593)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3548)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3516)
at org.example.c27.ExampleMain.main(ExampleMain.java:28)
Process finished with exit code 1不使用 @JsonFormat
-- before serialization --
Employee{name='Amy', employeeType=PartTime}
-- after serialization --
{"name":"Amy","employeeType":"PartTime"}
-- after deserialization --
Employee{name='Amy', employeeType=PartTime}總結(jié)
到此這篇關(guān)于Java中注解@JsonFormat用法的文章就介紹到這了,更多相關(guān)Java注解@JsonFormat內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java用POI導(dǎo)入導(dǎo)出Excel實(shí)例分析
在本篇文章里小編給大家整理的是一篇關(guān)于Java用POI導(dǎo)入導(dǎo)出Excel實(shí)例分析內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)下。2021-11-11
學(xué)Java做項(xiàng)目需要學(xué)習(xí)的一些技能
這篇文章主要介紹了學(xué)Java做項(xiàng)目需要學(xué)習(xí)的一些技能,例如JavaSE、Servlet、JSP等,總結(jié)了他們中需要學(xué)習(xí)的東西,都是一些經(jīng)驗(yàn)總結(jié),需要的朋友可以參考下2014-07-07
基于java線程池讀取單個(gè)SQL數(shù)據(jù)庫表
這篇文章主要為大家詳細(xì)介紹了基于java線程池讀取單個(gè)SQL數(shù)據(jù)庫表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08
java對(duì)象與json對(duì)象間的相互轉(zhuǎn)換的方法
本篇文章主要介紹了java對(duì)象與json對(duì)象間的相互轉(zhuǎn)換的方法,詳細(xì)介紹了json字符串和java對(duì)象相互轉(zhuǎn)換,有興趣的可以了解一下2017-01-01
Liquibase 在 Spring Boot 中的使用詳細(xì)介紹
Liquibase 提供了靈活的變更集機(jī)制,支持創(chuàng)建表、修改列、填充數(shù)據(jù)、回滾變更等多種操作,本文將通過多個(gè)豐富的示例,詳細(xì)講解如何在 Spring Boot項(xiàng)目中使用 Liquibase,感興趣的朋友跟隨小編一起看看吧2024-12-12
Spring Security無法調(diào)用接口錯(cuò)誤的問題解決
記錄一下之前在寫程序的時(shí)候遇到的問題,Spring Security無法調(diào)用接口錯(cuò)誤的問題,本文就來介紹一下解決方法,感興趣的可以了解一下2023-08-08
Spring Data Jpa 復(fù)合主鍵的實(shí)現(xiàn)
這篇文章主要介紹了Spring Data Jpa 復(fù)合主鍵的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04

