상황
- 아래글을 참조해서 만든 config가 적용 되지 않고, LocalDateTime이
[2021, 6, 12, 9, 51, 46, 380000000]
이렇게 출력되고 있음
- VO에 직접 @JsonFormat을 적용하면 되긴 하지만, 모든 vo에 적용하고 싶지 않다
- WebConfig의 @EnableWebMvc 어노테이션을 빼면 된다고하는데 그래도 될까 싶었다
해결과정
@EnableWebMvc를 뺐다
- @EnableWebMvc가 serializer, deserializer 설정을 가지고 있어서 커스텀으로 config를 등록해봤자 덮어씌우기때문
빼도 되는 이유
- @Value로 변수에 직접 주입이 안되어서 생성자 주입함
@Configuration
public class DateFormatConfig {
private String dateFormat;
private String datetimeFormat;
@Autowired
public DateFormatConfig(@Value("${format.date}") String dateFormat,
@Value("${format.date-time}") String datetimeFormat) {
this.dateFormat=dateFormat;
this.datetimeFormat=datetimeFormat;
}
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return jacksonObjectMapperBuilder -> {
jacksonObjectMapperBuilder.timeZone(TimeZone.getTimeZone("UTC"));
jacksonObjectMapperBuilder.simpleDateFormat(datetimeFormat);
jacksonObjectMapperBuilder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(dateFormat)));
jacksonObjectMapperBuilder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(datetimeFormat)));
};
}
}
참고
- config 만들때 봄
- @EnableWebMvc 가 culprit이다
- config에서 생성자주입
- @SpringBootApplication 이 있기때문에 @EnableWebMvc를 굳이 안써도됨 (더읽어봐야함)