Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Sắp xếp thứ tự field JSON với @JsonPropertyOrder (Jackson)

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