ModelMapper
서로 다른 객체로의 필드값을 자동으로 맵핑해주는 라이브러리
로직 실행 후 Entity를 가져온 후 Entity의 모든 데이터를 리턴해주기 보다 필요한 데이터들만 리턴해주기 위해 View Dto를 만들어 리턴을 해준다.
이때, 기존 Entity에서 새로 만든 Dto 객체에게 필드값을 전달하기 위해서 getter/setter를 이용하거나 builder 패턴을 이용하여 Dto 객체를 만들어서 전달할 수 있는데, 필드가 많아지는 경우에는 코드량도 많아지고 반복적인 작업량도 늘어나게 된다.
이때 ModelMapper를 이용하면 간단하게 Dto 객체를 만들어 전달 할 수 있다.
사용
ModelMapper를 사용하기 위해 의존성을 주입받는다.
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.8</version>
</dependency>
사용할 때 마다 객체생성하여 사용해도 무방하지만, 전역으로 사용될 수 있으므로 Bean으로 등록하여 사용한다.
@Configuration
public class AppConfig{
@Bean
public ModelMapper modelMapper() {
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration()
.setMatchingStrategy(MatchingStrategies.STRICT)
.setSkipNullEnabled(true)
.setFieldMatchingEnabled(true)
.setFieldAccessLevel(org.modelmapper.config.Configuration.AccessLevel.PRIVATE)
;
return modelMapper;
}
}
setMatchingStrategy : MatchingStrategies.STRICT를 사용하게 되면
기존 객체와 대상 객체의 필드명과 타입이 일치해야 맵핑을 시켜주도록 설정할 수 있습니다.
setSkipNullEnabled : null인 필드는 스킵
setFieldMatchingEnabled, setFieldAccessLevel : private 인 필드도 맵핑
public class UserEntity {
private int id;
private String name;
private String addr;
private String gender;
private int age;
}
...
public class UserDto {
private String name;
private String addr;
}
...
-> 기존
UserDto userDto = new UserDto();
userDto.setName(userEntity.getName());
userDto.setAddr(userEntity.getAddr());
-> modelmapper 사용
UserDto userDto = modelmapper.map(userEntity, UserDto.class);
getter/setter , builder 패턴을 이용하여 객체를 맵핑할 때에는
필드수가 많아지면 코드량도 많아지게 되지만
modelmapper를 이용한다면 간단하게 객체간 맵핑을 할 수 있다.
'IT > Spring' 카테고리의 다른 글
Spring Security (Springboot + thymeleaf) (0) | 2020.05.22 |
---|---|
Spring AOP - 어노테이션 만들기 (0) | 2019.11.28 |
설정파일 YAML (0) | 2019.04.30 |
메이븐 (Maven) (0) | 2019.04.30 |
에러 처리 (ControllerAdvice) (0) | 2019.04.29 |
댓글