Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java Jackson 라이브러리에서 @JsonPropertyOrder로 JSON 속성 순서 지정하기

Java에서 Jackson 라이브러리를 사용해 객체를 JSON으로 직렬화할 때, 기본적으로 속성 순서는 클래스 내부 구조에 따라 결정됩니다. 하지만 @JsonPropertyOrder 어노테이션을 사용하면 원하는 순서대로 속성을 직렬화할 수 있습니다.

@JsonPropertyOrder란?

@JsonPropertyOrder클래스 레벨(class-level)에서 사용되는 어노테이션입니다. 이 어노테이션은 필드 이름들의 목록을 속성 값으로 받으며, 객체가 JSON 문자열로 직렬화될 때 각 필드가 출력되는 순서를 정의합니다.

어노테이션 선언에 포함된 속성들은 지정된 순서대로 먼저 직렬화되며, 정의에 포함되지 않은 나머지 속성들은 그 뒤에 이어서 출력됩니다.

문법(Syntax)

public @interface JsonPropertyOrder

사용 예제

다음 예제는 Employee 클래스에 @JsonPropertyOrder 어노테이션을 적용하여 firstName, lastName, technologies, empId 순서대로 JSON이 출력되도록 설정한 코드입니다.

import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import java.util.*;
import java.io.*;

public class JsonPropertyOrderTest {
   public static void main(String args[]) throws JsonGenerationException,
         JsonMappingException, IOException {
      Employee emp = new Employee();
      emp.setFirstName("Adithya");
      emp.setEmpId(125);
      emp.setLastName("Jai");
      emp.getTechnologies().add("Java");
      emp.getTechnologies().add("Scala");
      emp.getTechnologies().add("Python");

      ObjectMapper mapper = new ObjectMapper();
      mapper.writerWithDefaultPrettyPrinter().writeValue(System.out, emp);
   }
}

// Employee 클래스
@JsonPropertyOrder({
   "firstName",
   "lastName",
   "technologies",
   "empId"
})
class Employee {
   private int empId;
   private String firstName;
   private String lastName;
   private List<String> technologies = new ArrayList<>();

   public int getEmpId() {
      return empId;
   }
   public void setEmpId(int empId) {
      this.empId = empId;
   }
   public String getFirstName() {
      return firstName;
   }
   public void setFirstName(String firstName) {
      this.firstName = firstName;
   }
   public String getLastName() {
      return lastName;
   }
   public void setLastName(String lastName) {
      this.lastName = lastName;
   }
   public List<String> getTechnologies() {
      return technologies;
   }
   public void setTechnologies(List<String> technologies) {
      this.technologies = technologies;
   }
}

실행 결과

위 코드를 실행하면 어노테이션에 정의한 순서 그대로 JSON이 생성되는 것을 확인할 수 있습니다.

{
   "firstName" : "Adithya",
   "lastName" : "Jai",
   "technologies" : [ "Java", "Scala", "Python" ],
   "empId" : 125
}

추가 팁: 알파벳순 정렬

필드 순서를 일일이 지정하지 않고 알파벳 순서로 정렬하고 싶다면, @JsonPropertyOrder의 alphabetic 속성을 true로 설정하면 됩니다.

@JsonPropertyOrder(alphabetic = true)
class Employee { ... }

이 경우 모든 속성이 이름 기준 오름차순으로 자동 정렬되어 출력됩니다. API 응답의 필드 순서를 일관되게 유지해야 하는 경우 @JsonPropertyOrder는 매우 유용한 기능입니다.