Giới thiệu
Jackson là một thư viện mạnh mẽ và dễ sử dụng cho Java, giúp chuyển đổi giữa đối tượng Java và định dạng JSON/XML một cách hiệu quả. Thư viện này có một số tính năng nổi bật:
- Hiệu năng cao và ổn định: sử dụng ít bộ nhớ, xử lý tốt các trường hợp JSON lớn hoặc nhỏ
- Thuận tiện: cung cấp API cao cấp, giảm thiểu các trường hợp sử dụng hàng ngày
- Không cần tự động hóa ánh xạ: đã tích hợp sẵn ánh xạ cho hầu hết các loại dữ liệu Java
- JSON sạch: tạo ra JSON nhỏ gọn và dễ hiểu
- Không phụ thuộc bên ngoài: chỉ cần JDK
- Được Spring hỗ trợ: Jackson là thư viện mặc định trongSpring Framework
Để sử dụng Jackson, thêm phụ thuộc vào Maven:
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.13.5</version>
</dependency>
1. Ví dụ 1: Kiểm soát quyền truy cập vào các thuộc tính
Sử dụng注解 @JsonProperty để kiểm soát quyền truy cập:
Ví dụ với hai lớp:
Lớp代表 dữ liệu từ CSDL:
public class QuyềnCSDL implements Serializable {
private Integer id;
private String mãQuyền;
}
Lớp nhận dữ liệu từ người dùng:
public class YêuCầuQuyền extends QuyềnCSDL {
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
@Override
public Integer getId() {
return super.getId();
}
}
2. Ví dụ 2: Chuyển đổi giữa đối tượng và chuỗi JSON
Tạo một công cụ tiện ích:
public class UtilsJSON {
private static final ObjectMapper mapper = new ObjectMapper();
public static ObjectMapper getObjectMapper() {
return mapper;
}
public static String ĐốiTượngĐếnJSON(Object obj) {
try {
return getObjectMapper().writeValueAsString(obj);
} catch (JsonProcessingException e) {
e.printStackTrace();
return "{}";
}
}
public static <T> T JSONĐếnĐốiTượng(String json, Class<T> clazz) {
try {
return mapper.readValue(json, clazz);
} catch (JsonProcessingException e) {
return null;
}
}
}
3. Ví dụ 3: Bỏ qua các thuộc tính có giá trị null
Sử dụng注解 @JsonInclude để bỏ qua các thuộc tính null:
@ApiModel(
value = "Dữ liệu phản hồi JSON",
description = "Dùng cho các yêu cầu AJAX, ok xác định dữ liệu có thành công không"
)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class KếtQuảAjax<T> implements Serializable {
static final long serialVersionUID = 1L;
@ApiModelProperty("Mã trạng thái")
private int mãTrạngThai;
@ApiModelProperty("Thành công?")
private boolean thànhCông;
@ApiModelProperty("Thông báo")
private String thôngBáo;
@ApiModelProperty("Dữ liệu")
private T dữLiệu;
@ApiModelProperty("Dữ liệu phụ thêm")
private HashMap<String, Object> dữLiệuPhụ;
}
Khi serialize, các thuộc tính null sẽ không xuất hiện trong JSON.