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

Java Gson의 ExclusionStrategy 인터페이스로 JSON 직렬화·역직렬화 시 특정 필드 제외하기

ExclusionStrategy 인터페이스는 Gson 라이브러리에서 직렬화 및 역직렬화 과정 중 특정 필드나 클래스를 제외할 때 사용됩니다. 이 인터페이스를 직접 구현한 클래스를 만든 후, GsonBuildersetExclusionStrategies() 메서드로 등록하면 됩니다. 이 메서드는 직렬화와 역직렬화 두 과정 모두에 제외 전략을 적용하도록 Gson을 설정합니다.

문법

public GsonBuilder setExclusionStrategies(ExclusionStrategy... strategies)

ExclusionStrategy 인터페이스의 주요 메서드

  • shouldSkipField(FieldAttributes f) : 제외하고 싶은 필드일 경우 true를 반환합니다.
  • shouldSkipClass(Class clazz) : 제외하고 싶은 클래스일 경우 true를 반환합니다.

예제

아래 예제에서는 firstName 필드를 제외하는 커스텀 제외 전략(CustomExclusionStrategy)을 구현한 뒤, Person 객체를 JSON으로 직렬화하고 다시 JSON을 객체로 역직렬화합니다.

import com.google.gson.*;
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;

public class ExclusionStrategyTest {
   public static void main(String args[]) throws Exception {
      Gson gson = new GsonBuilder().setExclusionStrategies(new CustomExclusionStrategy()).create();
      Person person = new Person();
      person.setFirstName("Adithya");
      person.setLastName("Sai");
      person.setAddress("Hyderabad");
      String jsonString = gson.toJson(person);
      System.out.println("Serialize a JSON: \n " + jsonString);
      String inputJson = "{\"firstName\":\"Raja\", \"lastName\":\"Ramesh\", \"address\":\"Hyderabad\"}";
      person = gson.fromJson(inputJson, Person.class);
      System.out.println("Deserialize a JSON:\n" + person);
   }
}

// CustomExclusionStrategy 클래스 : firstName 필드를 제외
class CustomExclusionStrategy implements ExclusionStrategy {
   public boolean shouldSkipField(FieldAttributes f) {
      if(f.getName().equals("firstName")) {
         return true;
      }
      return false;
   }
   public boolean shouldSkipClass(Class aClass) {
      return false;
   }
}

// Person 클래스
class Person {
   private String firstName, lastName, address;
   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 String getAddress() {
      return address;
   }
   public void setAddress(String address) {
      this.address = address;
   }
   public String toString() {
      return "Person [" + firstName + " " + lastName + " " + address + "]";
   }
}

실행 결과

Serialize a JSON:
{"lastName":"Sai","address":"Hyderabad"}
Deserialize a JSON:
Person [null Ramesh Hyderabad]

실행 결과를 보면 firstName 필드는 직렬화된 JSON 문자열에서 완전히 제외되었으며, 역직렬화 시에도 입력 JSON에 firstName 값이 존재하지만 무시되어 해당 필드는 null로 유지됩니다. 이처럼 ExclusionStrategy를 활용하면 비밀번호, 개인정보 같은 민감한 데이터를 JSON 변환 과정에서 간편하게 숨길 수 있습니다.