Annotation @JsonPropertyOrder (class-level) định nghĩa thứ tự xuất hiện field khi serialize. Field không liệt kê sẽ xuất hiện sau, theo thứ tự alphabet.
Cú pháp
@JsonPropertyOrder({ "firstName", "lastName", "skills", "id" })
class Employee { ... }
Ví dụ
import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.databind.*;
import java.io.IOException;
import java.util.*;
public class JsonPropertyOrderDemo {
public static void main(String[] args) throws IOException {
Employee emp = new Employee();
emp.setId(50);
emp.setFirstName("Hùng");
emp.setLastName("Võ");
emp.getSkills().add("Java");
emp.getSkills().add("Docker");
ObjectMapper mapper = new ObjectMapper();
mapper.writerWithDefaultPrettyPrinter().writeValue(System.out, emp);
}
}
@JsonPropertyOrder({ "firstName", "lastName", "skills", "id" })
class Employee {
private int id;
private String firstName, lastName;
private List<String> skills = new ArrayList<>();
// Getters/Setters
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getFirstName() { return firstName; }
public void setFirstName(String fn) { firstName = fn; }
public String getLastName() { return lastName; }
public void setLastName(String ln) { lastName = ln; }
public List<String> getSkills() { return skills; }
public void setSkills(List<String> s) { skills = s; }
}
Kết quả
{
"firstName" : "Hùng",
"lastName" : "Võ",
"skills" : [ "Java", "Docker" ],
"id" : 50
}
Tùy chọn: @JsonPropertyOrder(alphabetic = true)
Sắp xếp alphabet cho field không liệt kê:
@JsonPropertyOrder(value = { "id", "name" }, alphabetic = true)
class Config { ... }
// Field khác sẽ sort alphabet sau id, name
Lưu ý
- Chỉ ảnh hưởng serialization (ghi JSON), không ảnh hưởng deserialization
- Field không có trong danh sách vẫn được serialize (mặc định), đặt cuối
- Kết hợp với
@JsonPropertyđể đổi tên field JSON