티스토리 뷰

반응형

Spring Boot에서는 Jackson 라이브러리를 사용하여 JSON 데이터를 처리합니다. Jackson은 Java 객체와 JSON 데이터 간의 변환을 수행하는 라이브러리로, Java 객체를 JSON으로 직렬화(Serialize)하거나, JSON 데이터를 Java 객체로 역직렬화(Deserialize)할 수 있습니다. Spring Boot에서는 Jackson 라이브러리의 ObjectMapper 클래스를 사용하여 JSON 데이터를 처리합니다.

 

Jackson에서는 직렬화와 역직렬화를 수행할 때 사용하는 Serializer와 Deserializer를 지정할 수 있습니다. Serializer는 Java 객체를 JSON 데이터로 변환할 때 사용되고, Deserializer는 JSON 데이터를 Java 객체로 변환할 때 사용됩니다. Spring Boot에서는 이러한 Serializer와 Deserializer를 간편하게 등록하고 사용할 수 있도록 JsonSerialize와 JsonDeserialize 어노테이션을 제공합니다.

 

JsonSerialize 어노테이션을 사용하는 방법은 다음과 같습니다. (JsonDeserialize 사용하는 방법도 동일하며 Deserialize키워드를 사용하면 됩니다.)

1. Serializer 클래스 작성

Serializer 클래스는 com.fasterxml.jackson.databind.JsonSerializer 클래스를 상속받아 구현합니다. 아래는 예시 코드입니다.

public class CustomSerializer extends JsonSerializer<LocalDate> {
    private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    @Override
    public void serialize(LocalDate value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeString(formatter.format(value));
    }
}

위 코드에서는 LocalDate 타입의 값을 JSON 문자열로 변환하는 CustomSerializer 클래스를 구현합니다.

2-1. Serializer 어노테이션 적용 (특정 필드에만 적용하고 싶은 경우)

Java 객체의 필드나 메소드에 @JsonSerialize 어노테이션을 사용하여 Serializer 클래스를 지정합니다. 아래는 예시 코드입니다.

public class MyObject {
    @JsonSerialize(using = CustomSerializer.class)
    private LocalDate date;
    // ...
}

2-2. JsonComponent 어노테이션 사용 (같은 타입 모든 필드에 적용하고 싶은 경우)

Serializer나 Deserializer를 @Bean으로 등록하거나 @Configuration 클래스에서 등록할 수도 있지만, Spring Boot에서는 간단하게 등록하려면 @JsonComponent 어노테이션을 사용할 수 있습니다.

 

아래는 @JsonComponent 어노테이션을 사용하여 Serializer를 등록하는 예시 코드입니다.

@JsonComponent
public class CustomSerializer extends JsonSerializer<LocalDate> {
    private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    @Override
    public void serialize(LocalDate value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeString(formatter.format(value));
    }
}

 

 

@JsonComponent를 사용하면 같은 타입의 필드나 메소드는 해당 Serializer나 Deserializer가 자동으로 적용됩니다.

예를 들어, 위에서 작성한 @JsonComponent 어노테이션을 사용한 클래스에서 LocalDate 타입에 대한 Serializer 등록하였습니다. 그리고 LocalDate 타입의 필드가 포함된 MyObject 클래스를 아래와 같이 정의한다면,

public class MyObject {
    private LocalDate date;
    // getter, setter, constructor 생략
}

LocalDate 타입의 필드에 대해서는 @JsonSerialize나 @JsonDeserialize 어노테이션을 추가해주지 않아도 해당 Serializer와 Deserializer가 자동으로 적용됩니다.

반응형
댓글