객체의 필드 값을 다른 객체의 필드 값으로 자동으로 매핑
get
set
을 이용하여 직접 필드 값을 채우는 과정을 반복적으로 수행ModelMapper
사용implementation 'org.modelmapper:modelmapper:3.1.0'
@Override
public PageResponseDTO<ReplyDTO> getListOfBoard(Long bno, PageRequestDTO pageRequestDTO) {
Pageable pageable = PageRequest.of(pageRequestDTO.getPage() <=0? 0: pageRequestDTO.getPage() -1,
pageRequestDTO.getSize(),
Sort.by("rno").ascending());
Page<Reply> result = replyRepository.listOfBoard(bno, pageable);
List<ReplyDTO> dtoList =
result.getContent().stream().map(reply -> modelMapper.map(reply, ReplyDTO.class))
.collect(Collectors.toList());
return PageResponseDTO.<ReplyDTO>withAll()
.pageRequestDTO(pageRequestDTO)
.dtoList(dtoList)
.total((int)result.getTotalElements())
.build();
}
ModelMapper
객체 생성Reply
엔터티를 ReplyDTO
로 매핑@Configuration
public class RootConfig {
@Bean
public ModelMapper getMapper() {
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration()
.setFieldMatchingEnabled(true)
.setFieldAccessLevel(org.modelmapper.config.Configuration.AccessLevel.PRIVATE).setMatchingStrategy(MatchingStrategies.STRICT);
return modelMapper;
}
}
모든 destination 객체의 property 토큰들은 매칭 되어야 한다.
모든 source 객체의 property들은 하나 이상의 토큰이 매칭되어야 한다.
토큰은 어떤 순서로든 일치될 수 있다.
가장 엄격한 전략
source와 destination의 타입과 필드명이 같을 때만 변환
의도하지 않은 매핑이 일어나는 것을 방지할 때 사용
가장 느슨한 전략
토큰을 어떤 순서로도 일치 시킬 수 있다.
마지막 destination 필드명은 모든 토큰이 일치해야 한다.
마지막 source 필드명에는 일치하는 토큰이 하나 이상 있어야 한다.