package com.takensoft.common.config; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import org.egovframe.rte.fdl.cmmn.trace.LeaveaTrace; import org.egovframe.rte.fdl.cmmn.trace.handler.DefaultTraceHandler; import org.egovframe.rte.fdl.cmmn.trace.handler.TraceHandler; import org.egovframe.rte.fdl.cmmn.trace.manager.DefaultTraceHandleManager; import org.egovframe.rte.fdl.cmmn.trace.manager.TraceHandlerService; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.AntPathMatcher; import org.springframework.web.servlet.view.json.MappingJackson2JsonView; /** * @author takensoft * @since 2025.01.22 * @modification * since | author | description * 2025.01.22 | takensoft | 최초 등록 * * 기본 설정을 위한 Config */ @Configuration public class AppConfig { /** * @return MappingJackson2JsonView - JSON 응답을 위한 뷰 객체 * * JSON 응답을 반환할 때 사용하는 Jackson ObjectMapper를 설정하여, 모델에서 값을 추출하는 방식으로 JSON 응답을 생성 */ @Bean(name="jsonView") public MappingJackson2JsonView getJsonView () { ObjectMapper objectMapper = getObjectMapper(); MappingJackson2JsonView jsonView = new MappingJackson2JsonView(objectMapper); jsonView.setExtractValueFromSingleKeyModel(true); return jsonView; } /** * @return ObjectMapper - JSON 직렬화 및 역직렬화를 위한 객체 * * Java Time API를 위한 모듈을 등록하고, 날짜 포맷을 설정하는 등 ObjectMapper를 커스터마이즈하여 JSON 변환 * */ @Bean(name = "objectMapper") public ObjectMapper getObjectMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new JavaTimeModule()); //기본 날짜 포맷 비활성화 mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); //새로운 날짜 포맷 세팅 /*SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); mapper.setDateFormat(dateFormat); mapper.setTimeZone(TimeZone.getTimeZone("Asia/Seoul"));*/ return mapper; } /** * @return AntPathMatcher - 경로 패턴 매칭을 위한 객체 * * 경로 패턴을 매칭하여 URL 경로를 처리하는 데 사용되는 객체를 반환 */ @Bean public AntPathMatcher antPathMatcher() { return new AntPathMatcher(); } /** * @return DefaultTraceHandler - 추적 처리를 위한 기본 핸들러 * * 추적 요청을 처리하는 기본 핸들러를 반환 */ @Bean public DefaultTraceHandler defaultTraceHandler() { return new DefaultTraceHandler(); } /** * @return DefaultTraceHandleManager - 추적 핸들러 관리 서비스 객체 * * 여러 추적 핸들러와 경로 매칭 설정을 관리하는 서비스를 제공 */ @Bean public DefaultTraceHandleManager traceHandlerService() { DefaultTraceHandleManager defaultTraceHandleManager = new DefaultTraceHandleManager(); defaultTraceHandleManager.setReqExpMatcher(antPathMatcher()); defaultTraceHandleManager.setPatterns(new String[]{"*"}); defaultTraceHandleManager.setHandlers(new TraceHandler[]{defaultTraceHandler()}); return defaultTraceHandleManager; } /** * @return LeaveaTrace - 추적 기능을 위한 LeaveaTrace 객체 * * 추적 핸들러 서비스를 설정하여 추적 기능을 활성화 */ @Bean public LeaveaTrace leaveaTrace() { LeaveaTrace leaveaTrace = new LeaveaTrace(); leaveaTrace.setTraceHandlerServices(new TraceHandlerService[]{traceHandlerService()}); return leaveaTrace; } }