-
Java - LocalDateTime custom Serializer DeserializerJava 2023. 9. 19. 07:45반응형
Spring에서 LocalDateTime을 사용하다보면 serialize, deserialize 할때 에러가 종종 발생한다.
그럴때 전체 config를 고치는 방법도 있지만 커스텀 serializer, deserializer를 만들어서 활용하는 방법이 있다.
Serializer
import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> { private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss"); @Override public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeString(value.format(DATE_FORMAT)); } }
Deserializer
import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import java.io.IOException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> { private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss"); @Override public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { try { return LocalDateTime.parse(p.getText(), DATE_FORMAT); } catch (Exception e) { return null; } } }
DTO에 적용하기
@JsonSerialize 어노테이션에 생성한 LocalDateTimeSerializer를 넣어주면 된다.
@JsonDeserialize도 동일하게 넣어준다.
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import lombok.Data; import java.time.LocalDateTime; @Data @JsonIgnoreProperties(ignoreUnknown = true) public class Company { @JsonSerialize(using = LocalDateTimeSerializer.class) @JsonDeserialize(using = LocalDateTimeDeserializer.class) @JsonProperty("createDate") LocalDateTime createDate; @JsonSerialize(using = LocalDateTimeSerializer.class) @JsonDeserialize(using = LocalDateTimeDeserializer.class) @JsonProperty("updateDate") LocalDateTime updateDate; }
이렇게 하면 LocalDateTime parsing할때 발생하는 에러를 없앨 수 있다.
반응형'Java' 카테고리의 다른 글
Java - ArrayList 초기화 (0) 2024.03.26 Java - int를 String으로 변환하기 (0) 2024.03.25 Java - Enum for loop, forEach(), iterator (0) 2023.03.04 Java - String.replace(), String.replaceAll() 차이 (0) 2023.03.03 Java - Comparator 예제 (lambda 표현식) (0) 2023.01.20