Chuyển đổi JSON sang lớp Java
Tạo các lớp Java từ JSON: trang chạy json_typegen (WebAssembly) ở chế độ Kotlin rồi viết lại từng data class thành lớp Java với các trường private, hàm khởi tạo nhận đầy đủ tham số, getter và setter.
Tạo POJO để giải tuần tự hóa phản hồi REST bằng Jackson.
Khi nào nên sử dụng
- Tạo POJO để giải tuần tự hóa phản hồi REST bằng Jackson.
- Phác thảo các lớp DTO cho controller của Spring từ dữ liệu mẫu.
Cách sử dụng
- Dán đối tượng hoặc mảng JSON vào trình soạn thảo bên trái.
- Xem các lớp: lớp gốc là Root và các đối tượng lồng nhau trở thành lớp riêng được đặt tên theo khóa tương ứng.
- Sao chép chúng vào các tệp .java riêng (đã có lệnh import cho List và Jackson) rồi điều chỉnh kiểu nếu cần.
JSON
{
"id": 42,
"user_name": "ada",
"active": true,
"tags": ["admin", "editor"]
}Các lớp Java
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
public class Root {
private Long id;
@JsonProperty("user_name")
private String userName;
private Boolean active;
private List<String> tags;
public Root(Long id, String userName, Boolean active, List<String> tags) {
this.id = id;
this.userName = userName;
this.active = active;
this.tags = tags;
}
public Long getId() {
return this.id;
}
…Chi tiết và giới hạn
Quá trình tạo mã chạy trong trình duyệt bằng WebAssembly; không có cài đặt.
Khóa snake_case trở thành trường camelCase với @JsonProperty của Jackson; Jackson và java.util.List được import khi sử dụng.
Số được ánh xạ sang Long hoặc Double, còn boolean sang Boolean; getter cho boolean dùng get, không dùng is.
Giá trị null có kiểu Object, còn mảng chứa toàn null có kiểu List<?>. Hãy thay bằng kiểu cụ thể khi bạn biết dữ liệu thực tế.
FAQ
Tôi có thể chuyển đổi mảng JSON ở cấp gốc không?
Có. Phần gốc trở thành lớp bao Root có trường List<Root2>, còn các phần tử của mảng trở thành lớp Root2.
Các trường không bắt buộc có được xử lý không?
Công cụ phát hiện khóa bị thiếu ở một số phần tử của mảng, nhưng đầu ra Java bỏ dấu đánh dấu không bắt buộc, nên mọi trường đều là kiểu bao thông thường có thể nhận null.
Công cụ có tạo annotation Lombok hoặc record không?
Không. Công cụ tạo các lớp thông thường với hàm khởi tạo, getter và setter được viết tường minh.
Các giá trị null được gán kiểu như thế nào?
Trường có giá trị null trong mẫu trở thành Object (private Object note;), vì không thể suy luận kiểu cụ thể. Hãy cung cấp mẫu có giá trị thực để nhận được String, Long hoặc một lớp lồng nhau.