@EnableWebMvc와 WebMvcConfigurer

2024. 6. 25. 17:23Spring

Response에 timestamp를 담아서 보냈더니

갑자기 localDateTime이

"timestamp": [
        2024,
        5,
        19,
        1,
        24,
        12,
        394621000
    ]

 

이렇게 각 항목별로 JSON Serialized 되어 리턴되는 현상이 발생했다.

 

원래대로라면

"timestamp": "2024-05-21T23:19:49.380086"

 

이렇게 String 형태로 나와야 하는데 다 쪼개져서 나와서 처음에는 Jackson 라이브러리에 문제가 있나 했다.

jackson 라이브러리란 ?

잭슨은 JSON -> java 클래스로 Deserialize, java 클래스 -> JSON 으로 Serialize 할 때 유용한 라이브러리이다.

 

그러나 dependency에

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jsr310 -->
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.9.9</version>
</dependency>  

 

를 추가해도 바뀌는게 없어서 다른 방법을 계속 찾다가, 잭슨 라이브러리 문제가 아니고 어노테이션 문제라는 것을 알 수 있었다.

 

로그인 방식으로 JWT토큰 방식을 사용하려고 추가한 코드에 @EnableWebMvc 가 붙어있었고,
스프링부트는 2.0 버전 이상부터 LocalDateTime 클래스를 string 형태로 리턴해주는데
해당 어노테이션이 적용되어 있으면 스프링부트의 auto configuration 기능이 활성화 되지 않았다.

 

 💡 따라서, WebMVC 설정이 필요한 경우에는 해당 어노테이션을 사용하지 말고
WebMvcConfigurer 인터페이스를 구현하여 @Configuration 어노테이션을 사용하면 된다.

내가 작성한 코드에는 EnableWebMvc + WebMvcConfigurer 인터페이스 구현 + @Configuration

이 세가지가 다 적용이 되어 있었다.

 

결과적으로 @EnableWebMvc 만 지워줬더니 해결되었다!