[Java] Serialize with Jackson
Introduction
Jackson 是 Java 生態系統中最受歡迎的 JSON 處理函式庫之一,由 FasterXML 組織開發。它提供了高效能的 JSON 序列化和反序列化功能,並且是 Spring Boot 的預設 JSON 處理器。
主要特色
- 高效能:在大多數情況下比 Gson 更快
- 功能豐富:支援 JSON、XML、YAML 等多種格式
- Spring 整合:Spring Boot 內建支援
- 註解豐富:提供大量註解來控制序列化行為
- 模組化設計:核心、註解、資料綁定等模組分離
基本用法
簡單物件序列化
// 建立 ObjectMapper 實例
ObjectMapper mapper = new ObjectMapper();
// 物件轉 JSON
Person person = new Person("John", 30);
String json = mapper.writeValueAsString(person);
// JSON 轉物件
Person personFromJson = mapper.readValue(json, Person.class);
集合處理
// List 序列化
List<Person> people = Arrays.asList(
new Person("John", 30),
new Person("Jane", 25)
);
String json = mapper.writeValueAsString(people);
// List 反序列化
List<Person> peopleFromJson = mapper.readValue(json,
new TypeReference<List<Person>>(){});
常用註解
@JsonProperty
public class User {
@JsonProperty("user_name")
private String userName;
@JsonProperty("user_id")
private Long userId;
}
@JsonAlias
public class User {
@JsonAlias({"user_name", "username", "name"})
private String userName; // 可以接受多種字段名稱
}
@JsonIgnore 和 @JsonIgnoreProperties
@JsonIgnoreProperties({"password", "internalId"})
public class User {
private String name;
@JsonIgnore
private String password;
private String internalId;
}
@JsonFormat
public class Event {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date eventTime;
@JsonFormat(shape = JsonFormat.Shape.STRING)
private BigDecimal amount;
}
進階配置
ObjectMapper 配置
ObjectMapper mapper = new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);