본문 바로가기
공부/프로그래밍

[java] objectMapper로 object->string(json) 변경 시 LocalDate 를 yyyy-MM-dd 포멧하기

by demonic_ 2020. 2. 19.
반응형

DTO에 저장되어 있는 값을 Json (String) 형태로 변환하려고 할 때 찾은게 ObjectMapper 이다.

그런데 ObjectMapper 를 그냥 사용하면 보기편한 날짜형태가 아닌, 다음과 같은 형태로 변환된다.

"createdDt":{"year":2020,"month":"FEBRUARY","monthValue":2,"dayOfMonth":18,"dayOfWeek":"TUESDAY","leapYear":true,"dayOfYear":49,"era":"CE","chronology":{"id":"ISO","calendarType":"iso8601"}

 

테스트 환경을 위해 2개의 오브젝트를 생성했다

import java.time.LocalDate;

public class TestDto {
    private String name;
    private LocalDate createdDt;

    public TestDto(String name, LocalDate createdDt) {
        this.name = name;
        this.createdDt = createdDt;
    }

    public String getName() {
        return name;
    }

    public LocalDate getCreatedDt() {
        return createdDt;
    }
}

 

메인클래스에서 호출해 변환해보면 다음과 같은 로그가 출력된다

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.time.LocalDate;

public class TestJavaMain {
    public static void main(String[] args) throws JsonProcessingException {
        TestDto testDto = new TestDto("아이유", LocalDate.now());

        ObjectMapper mapper = new ObjectMapper();

        String result = mapper.writeValueAsString(testDto);
        System.out.println("result = " + result);
    }
}

결과

result = {"name":"아이유","createdDt":{"year":2020,"month":"FEBRUARY","monthValue":2,"dayOfMonth":18,"dayOfWeek":"TUESDAY","leapYear":true,"dayOfYear":49,"era":"CE","chronology":{"id":"ISO","calendarType":"iso8601"}}}

 

mapper에 다음 옵션을 추가하면 원하는 형태로 데이터포멧이 된다.

public class TestJavaMain {
    public static void main(String[] args) throws JsonProcessingException {
        TestDto testDto = new TestDto("아이유", LocalDate.now());

        ObjectMapper mapper = new ObjectMapper();
        mapper.registerModule(new JavaTimeModule()); // 추가
        mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); // 추가

        String result = mapper.writeValueAsString(testDto);
        System.out.println("result = " + result);
    }
}

결과

result = {"name":"아이유","createdDt":"2020-02-18"}

 

끝.

 

 

 

참조:

https://stackoverflow.com/questions/29571587/deserializing-localdatetime-with-jackson-jsr310-module

 

Deserializing LocalDateTime with Jackson JSR310 module

I'm using the library described the Jackson Datatype JSR310 page but I'm still having difficulty getting it to work. I have configured the following bean: @Bean @Primary public ObjectMapper

stackoverflow.com

 

반응형

댓글