MockMvc 사용시 LocalDateTime 배열 직렬화 문제 해결

2024. 2. 22. 13:47JAVA/Spring

상황

Spring Framework에서 WebMvcTest를 수행하던중에 MockMvc를 이용하여 LocalDateTime 타입의 데이터를 Json 직렬화시 배열로 나오는 문제가 발생하였습니다. 예를 들어 다음은 어떤 특정한 종목의 지정가 알림 배열을 직렬화한 결과입니다.

"targetPrices":[
    {
    	"notificationId":1,
        "targetPrice":60000,
        "dateAdded":[2024,2,22,13,40,0,766630000]
    },
    {
        "notificationId":2,
        "targetPrice":70000,
        "dateAdded":[2024,2,22,13,40,0,766630000]
    }
]

 

위 직렬화 결과를 보면 dateAdded의 값이 "2024-02-22T13:40:00.766630000"이 아닌 배열 형태인 것을 볼 수 있습니다.

 

원인

MockMvc 인스턴스 초기화시 Jackson 인스턴스를 주입해주지 않아서입니다.

 

해결 방법

MockMvc 인스턴스 초기화시 setMessageConverters 메소드를 호출하며 ObjectMapper 인스턴스를 전달합니다.

mockMvc = MockMvcBuilders.standaloneSetup(stockTargetPriceNotificationRestController)
			.setControllerAdvice(globalExceptionHandler)
			.setCustomArgumentResolvers(authPrincipalArgumentResolver)
			.setMessageConverters(new MappingJackson2HttpMessageConverter(objectMapper))
			.alwaysDo(print())
			.build();

 

'JAVA > Spring' 카테고리의 다른 글