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

Java Jackson @JsonProperty 어노테이션으로 JSON 필드 이름 변경하는 방법

Jackson의 @JsonProperty 어노테이션은 JSON 직렬화(Serialization) 또는 역직렬화(Deserialization) 과정에서 특정 프로퍼티나 메서드에 적용하여 사용합니다. 이 어노테이션은 선택적인 'name' 파라미터를 받을 수 있으며, Java 클래스의 프로퍼티 이름과 JSON의 'key' 이름이 서로 다를 때 특히 유용합니다. 기본적으로 key 이름과 프로퍼티 이름이 일치하면 값이 자동으로 매핑되지만, 이름이 다른 경우 이 어노테이션으로 매핑 관계를 직접 지정할 수 있습니다.

아래 예제에서는 @JsonProperty 어노테이션을 사용하여 JSON 출력 시 필드 이름을 원하는 형태로 변경하는 방법을 살펴보겠습니다.

예제 코드

import java.io.IOException;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.annotation.JsonProperty;

public class JsonPropertyAnnotationTest {
    public static void main(String[] args) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        mapper.enable(SerializationFeature.INDENT_OUTPUT);
        User user = new User("Sai", "Adithya", "9959984000", "0402358700");
        String data = mapper.writeValueAsString(user);
        System.out.println(data);
    }
}

// User 클래스
class User {
    @JsonProperty("first-name")
    public String firstName;

    @JsonProperty("last-name")
    public String lastName;

    @JsonProperty("mobile-phone")
    public String mobilePhone;

    @JsonProperty("home_phone")
    public String workPhone;

    public User(String firstName, String lastName, String mobilePhone, String workPhone) {
        super();
        this.firstName = firstName;
        this.lastName = lastName;
        this.mobilePhone = mobilePhone;
        this.workPhone = workPhone;
    }
}

실행 결과

{
    "first-name" : "Sai",
    "last-name" : "Adithya",
    "mobile-phone" : "9959984000",
    "home_phone" : "0402358700"
}

위 실행 결과를 보면, Java 클래스의 원래 필드 이름인 firstName, lastName, mobilePhone, workPhone이 각각 first-name, last-name, mobile-phone, home_phone으로 변경되어 출력된 것을 확인할 수 있습니다.

주요 포인트 정리

  • @JsonProperty("이름") 형태로 지정한 문자열이 JSON의 key 이름으로 사용됩니다.
  • 어노테이션은 필드뿐만 아니라 getter/setter 메서드에도 적용할 수 있습니다.
  • 역직렬화 시에도 동일하게 적용되므로, JSON의 key와 Java 필드 이름이 다르더라도 올바르게 매핑됩니다.
  • kebab-case(first-name), snake_case(home_phone) 등 어떤 네이밍 규칙이든 자유롭게 지정할 수 있습니다.