## build.gradle ##
// <https://mvnrepository.com/artifact/org.modelmapper/modelmapper>
implementation group: 'org.modelmapper', name: 'modelmapper', version: '3.1.1'
## model/ModelConverter.java ##
import org.modelmapper.ModelMapper;
import org.modelmapper.convention.MatchingStrategies;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
/**
`*
`* Model Mapper는 스프링 빈으로 사용하지 않고, 단순 전역 스태틱 변수를 참조하여 사용
`* 매퍼 파편화 개선, 불필요한 의존성 주입을 개선하고, 사용성의 편의를 위함
`*/
@Component
public class ModelConverter {
public static final ModelMapper MODEL_MAPPER = ModelConverter.createModelMapper();
@Bean
public ModelMapper modelMapper() { return ModelConverter.createModelMapper(); }
public static ModelMapper createModelMapper() {
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
return modelMapper;
}
}
## service/UserService.java ##
import static kr.co.onmediagroup.onoffapi.model.ModelConverter.MODEL_MAPPER;
... (생략)
User.UserResDTO userResDTO = MODEL_MAPPER.map(userEntity, User.UserResDTO.class);
MatchingStrategies.STRICT와 같은 설정을 한 곳에서 정의하므로,
모든 ModelMapper 사용처에서 일관된 매핑 전략을 적용할 수 있습니다.
modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
STRICT는 DTO ↔ Entity 변환 시 필드명이 정확히 일치해야만 매핑됩니다.@Bean
public ModelMapper modelMapper()