Đa hình trong việc chuyển đổi giữa json và object bằng Jackson

Bài toán: API bạn gọi trả về json là một đối tượng Dossier (tập hồ sơ) trong đó chứa một list các Document. Document có thể là IdentityCard nếu documentType=0, hoặc Passport nếu documentType=1.

Vậy làm sao để các bạn parse từ json sang một thể hiện của DossierTrong bài này, mình sẽ hướng dẫn các bạn việc chuyển đổi từ object sang json (và ngược lại) bằng thư viện Jackson.

1. Add thư việc Jackson 

Nếu các bạn dùng maven thì add dependency sau vào file pom.

2. Tạo các đối tượng domain

Untitled Diagram

Các bạn có thắc mắc vì sao không có thuộc tính documentType trong lớp cha Document không ? Thuộc tính documentType dùng để phân biệt loại document nên mình ko vẽ vào đây. Hơn nữa, Jackson dựa vào thuộc tính này để parse đúng thể hiện của Document và documentType sẽ không nằm trong class Document.

Đầu tiên là enum dùng để phân biệt các loại document:

Tiếp theo, tạo class Document và thêm thông tin config cho Jackson

@JsonTypeInfo là anotation dùng để cấu hình kiểu dữ liệu, Jackson sẽ đọc khi thực hiện json serialization và deserialization. Có nhiều cách để chỉ ra JsonTypeInfo, như đoạn code trên, mình chỉ ra thuộc tính documentType dùng để xác định kiểu dữ liệu (hay cụ thể hơn là kiểu Document).

@JsonSubTypes dùng để chỉ ra những kiểu dữ liệu mà bạn đã cấu hình bằng @JsonTypeInfo. Trong đoạn code trên, mình chỉ ra nếu documentType=0 thì kiểu dữ liệu là IdentityCard

3. Hàm chuyển đổi

Chuyển từ object sang json

Chuyển từ json sang object

Các bạn thể tải full code ở đây: https://github.com/tranductrinh/polymorphic-json

Cảm ơn.

Spread the love
  •  
  •  
  •  
  •  
  •  

Leave a Reply

Be the First to Comment!

Notify of
avatar