main 메소드가 선언된 어플리케이션의 클래스에 아래와 같이 @PostConstruct 를 통해 타임존을 설정한다.
package com.tutorial.tailerbox;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import javax.annotation.PostConstruct;
import java.util.TimeZone;
@SpringBootApplication
public class TailerboxApplication {
@PostConstruct
void started() {
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"));
}
public static void main(String[] args) {
SpringApplication.run(TailerboxApplication.class, args);
}
}
@JsonFormat
Entity 또는 DTO 에서 필드 타입에 @JsonFormat 어노테이션을 사용하는 경우 timezone 을 지정하지 않을 시 응답 데이터로 전환될 때 기본값이 UTC로 전송이 되는데.. 이걸 모든 날짜에 해당하는 프로퍼티에 코딩을 하는게 귀찮고 깔끔하지가 않다..
...
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul")
private Timestamp createdAt;
...
@Jackson2ObjectMapperBuilderCustomizer 사용하기
@JsonFormat 어노테이션은 Jackson 라이브러리에서 제공되며 spring-boot-starter-web 에 포함되어있다.
configuration 을 정의한 패키지에 아래와 같이 클래스를 생성하고 다음의 코드를 작성한다.
package com.tutorial.tailerbox.config;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.format.DateTimeFormatter;
import java.util.TimeZone;
@Configuration
public class DateFormatConfiguration {
private static final String dateFormat = "yyyy-MM-dd";
private static final String datetimeFormat = "yyyy-MM-dd HH:mm:ss";
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return jacksonObjectMapperBuilder -> {
jacksonObjectMapperBuilder.timeZone(TimeZone.getTimeZone("Asia/Seoul"));
jacksonObjectMapperBuilder.simpleDateFormat(datetimeFormat);
jacksonObjectMapperBuilder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(dateFormat)));
jacksonObjectMapperBuilder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(datetimeFormat)));
};
}
}
Jackson2ObjectMapperBuilderCustomizer 는 JSON 응답값을 변경할 수 있는 인터페이스이다.
Jackson2ObjectMapperBuilder 클래스는 Jackson 라이브러리의 기본적인 설정을 사용하는데, Jackson2ObjectMapperBuilderCustomizer 인터페이스를 이용해서 우리가 원하는 대로 JSON 응답값을 변경할 수 있도록 해준다.
날짜 형식을 변경하기 위해서 사용하기 때문에 DateFormatConfiguration이라는 이름으로 만들었지만, JSON 응답에 관련된 수정을 하게된다면 클래스 이름을 그에 맞게 만들면 된다. 여기서는 날짜 형식만 변경하지만 이 외에도 JSON 응답값의 인덴트(띄어쓰기) 설정 등 여러가지를 변경할 수 있다.
'Framework > Spring' 카테고리의 다른 글
[Spring] MyBatis Log 설정하기 (0) | 2021.12.16 |
---|---|
[Spring] Get Request 의 파라미터를 객체로 받을 때의 Case Convert (0) | 2021.12.15 |
[Spring] MyBatis 연동 (0) | 2021.12.06 |
[Spring] Unit Test (0) | 2021.12.06 |
[Spring] Repository, Pageable, Sort (0) | 2021.12.04 |