개요
@JSON 어노테이션은 JSONSerializer 클래스에서 사용되며, 직렬화(serialize) 과정 중에 특정 필드를 결과에 포함하거나 제외할 수 있게 해줍니다. JSONSerializer 클래스의 serialize() 메서드를 호출하면 대상 객체 인스턴스에 대한 얕은(shallow) 직렬화가 수행되는데, 이때 getter 메서드에 붙은 @JSON 어노테이션 설정이 반영됩니다.
문법
@Retention(value=RUNTIME)
@Target(value={FIELD,TYPE,METHOD})
public @interface JSON@JSON 어노테이션은 런타임(RUNTIME)까지 유지되며, 필드(FIELD), 타입(TYPE), 메서드(METHOD)에 적용할 수 있습니다. 가장 많이 쓰이는 속성인 include는 boolean 값을 가지며, 기본값은 true입니다. false로 설정하면 해당 필드가 JSON 출력에서 제외됩니다.
예제 코드
아래 예제는 Employee 클래스의 lastName과 address 필드에 @JSON(include=false)를 적용하여, 직렬화 결과에서 이 두 필드를 제외하는 방법을 보여줍니다.
import flexjson.JSONSerializer;
import flexjson.JSON;
public class JSONAnnotationTest {
public static void main(String[] args) {
JSONSerializer serializer = new JSONSerializer().prettyPrint(true);
Employee emp = new Employee("Raja", "Ramesh", 30, "Hyderabad");
String jsonStr = serializer.serialize(emp);
System.out.println(jsonStr);
}
}
// Employee 클래스
class Employee {
private String firstName, lastName, address;
private int age;
public Employee(String firstName, String lastName, int age, String address) {
super();
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.address = address;
}
public String getFirstName() {
return firstName;
}
// lastName 필드는 직렬화에서 제외
@JSON(include=false)
public String getLastName() {
return lastName;
}
public int getAge() {
return age;
}
// address 필드는 직렬화에서 제외
@JSON(include=false)
public String getAddress() {
return address;
}
}실행 결과
{
"age": 30,
"class": "Employee",
"firstName": "Raja"
}정리
위 실행 결과를 보면 firstName과 age만 JSON으로 변환되고, @JSON(include=false)이 적용된 lastName과 address는 출력에서 제외된 것을 확인할 수 있습니다. 또한 flexjson은 기본적으로 클래스 정보를 나타내는 "class" 키를 함께 출력하는데, 이를 숨기려면 new JSONSerializer().exclude("class")처럼 exclude() 메서드를 함께 사용하면 됩니다.