Jackson介紹
Jackson作爲一個知名,並且經典的Java平臺的JSON庫,有人說它是最好的JSON解析工具,或者只是一個簡單的還行的JSON解析庫,不管如何Jackson都是一個值得一學,值得一用的JSON處理庫。
背景
有一個實體類,裏面有個字段
private LocalDateTime createdTime;
將該字段序列化爲Json格式時會有一大堆的字符,我想要的是指定的格式(yyyy-MM-dd HH:mm:ss)並且需要在轉換的時候加上時區(加8小時)
解決方案一
maven依賴
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>2.8.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.8.8</version>
</dependency>
測試代碼
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
import java.io.IOException;
import java.time.LocalDateTime;
/**
* 測試jackson對LocalDateTime序列化
*/
public class TestJacksonLocalDateTime {
/**
* 實體類
*/
static class MyDate {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createdTime;
public LocalDateTime getCreatedTime() {
return createdTime;
}
public void setCreatedTime(LocalDateTime createdTime) {
this.createdTime = createdTime;
}
@Override
public String toString() {
return "MyDate{" +
"createdTime=" + createdTime +
'}';
}
}
public static void main(String[] args) throws IOException {
MyDate myDate = new MyDate();
myDate.setCreatedTime(LocalDateTime.now());
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new ParameterNamesModule())
.registerModule(new Jdk8Module())
.registerModule(new JavaTimeModule());
String res = mapper.writeValueAsString(myDate);
// 打印序列化後的數據:{"createdTime":"2020-01-21 17:36:27"}
System.out.println(res);
MyDate myDate1 = mapper.readValue(res, MyDate.class);
// 打印反序列化後的數據:MyDate{createdTime=2020-01-21T17:36:27}
System.out.println(myDate1);
}
}
解決方案二
依賴同上
在LocalDateTime類型的字段上加上註解
/**
* 創建時間
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonSerialize(using = LocalDateTimeSerializer.class)
private LocalDateTime createdTime;