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

Java Gson에서 커스텀 FieldNamingStrategy를 구현하는 방법

FieldNamingStrategy는 Gson에서 사용자 정의 필드 이름을 지정할 수 있게 해주는 메커니즘입니다. 이를 통해 클라이언트 코드는 일반적인 Java 필드 선언 규칙으로는 표현할 수 없는 특정 네이밍 규칙으로 필드 이름을 자유롭게 변환할 수 있습니다.

FieldNamingStrategy 인터페이스를 구현하려면 translateName() 메서드를 오버라이드해야 하며, 이 메서드에서 반환하는 문자열이 실제 JSON 직렬화 시 사용됩니다. 아래 예제에서는 모든 필드 이름 앞에 "pre_"라는 접두사를 붙이는 커스텀 네이밍 전략을 구현합니다.

예제 코드

import java.lang.reflect.Field;
import com.google.gson.*;
public class GsonFieldNamingStrategyTest {
    public static void main(String[] args) {
        Employee emp = new Employee();
        emp.setEmpId(115);
        emp.setFirstName("Adithya");
        emp.setLastName("Jai");
        CustomFieldNamingStrategy customFieldNamingStrategy = new CustomFieldNamingStrategy();
        GsonBuilder gsonBuilder = new GsonBuilder();
        Gson gson = gsonBuilder.setFieldNamingStrategy(customFieldNamingStrategy).create();
        String result = gson.toJson(emp);
        System.out.println(result);
    }
    // 커스텀 FieldNamingStrategy
    private static class CustomFieldNamingStrategy implements FieldNamingStrategy {
        @Override
        public String translateName(Field field) {
            return "pre_" + field.getName();
        }
    }
}
// Employee 클래스
class Employee {
    private int empId;
    private String firstName;
    private String lastName;
    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;
    }
}

코드 설명

위 코드의 핵심 동작 흐름은 다음과 같습니다.

1. CustomFieldNamingStrategy 내부 클래스가 FieldNamingStrategy 인터페이스를 구현하고, translateName() 메서드에서 필드 이름 앞에 "pre_"를 붙여 반환합니다.
2. GsonBuilder의 setFieldNamingStrategy() 메서드에 해당 전략 객체를 전달하여 Gson 인스턴스를 생성합니다.
3. toJson()으로 직렬화하면 모든 필드 이름에 접두사가 적용된 JSON 문자열이 출력됩니다.

실행 결과

{"pre_empId":115,"pre_firstName":"Adithya","pre_lastName":"Jai"}

실행 결과를 보면 원래 필드 이름인 empId, firstName, lastName이 각각 pre_empId, pre_firstName, pre_lastName으로 변환된 것을 확인할 수 있습니다. 이처럼 FieldNamingStrategy를 활용하면 외부 API 명세나 레거시 시스템 요구 사항에 맞춰 JSON 키 이름을 유연하게 제어할 수 있습니다.