- ModelMapper 설정
- 객체의 프로퍼티를 다른 객체의 프로퍼티로 맵핑해주는 유틸리티
- 토그나이저 설정
public void updateProfile(Account account, Profile profile) {
accountRepository.save(account); // acount가 detached 상태이기 때문. completeSignUp의 account 와 상태 다름
account.setUrl(profile.getUrl()); modelMapper 로 간단히 구현
account.setOccupation(profile.getOccupation());
account.setLocation(profile.getLocation());
account.setBio(profile.getBio());
}
public void updateNotifications(Account account, Notifications notifications) {
account.setStudyCreatedByWeb(notifications.isStudyCreatedByWeb());
account.setStudyCreatedByEmail(notifications.isStudyCreatedByEmail());
account.setStudyUpdatedByWeb(notifications.isStudyUpdatedByWeb());
account.setStudyUpdatedByEmail(notifications.isStudyUpdatedByEmail());
account.setStudyEnrollmentResultByEmail(notifications.isStudyEnrollmentResultByEmail());
account.setStudyEnrollmentResultByWeb(notifications.isStudyEnrollmentResultByWeb());
accountRepository.save(account);
}
이와 같은 set과 get으로 매핑이 필요한 코드를 ModelMapper를 이용하여 간결하게 줄일 수 있다.
ModelMapper 사용하기
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.6</version>
</dependency>
@Bean // 여러번 매번 만들필요가 없기 때문에 빈으로 등록해서 사용
public ModelMapper modelMapper() {
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration()
.setDestinationNameTokenizer(NameTokenizers.UNDERSCORE) // 언더스코어로 구분
.setSourceNameTokenizer(NameTokenizers.UNDERSCORE);
return modelMapper;
}
매번 만들 필요가 없기 때문에 빈으로 등록해서 사용하도록 하였다.
modelMapper의 여러 설정 속성들이 있으며 프로젝트에 맞게 잘 설정해 주어야 에러가 나지 않는다.
토크나이저 설정
필드명이 다를 경우, camelCase -> unser_score 형태인 경우 토크나이저 설정을 통해서 자동으로 매핑 시킬 수 있다
토크나이저를 설정하여 UNDERSCORE(_)를 사용했을 때에만 nested 객체를 참조하는 것으로 간주하고
그렇지 않은 경우에는 해당 객체의 직속 프로퍼티에 바인딩 하도록 하였다.
ModelMapper는 매핑 설정을 통해서 필드명이나 구조가 일치하지 않더라도 TypeMap을
이용하여 매핑시킬 수 있으며 특정 필드 생략 등 다양한 설정할 수 할 수 있다.
http://modelmapper.org/user-manual/configuration/#matching-strategies
'Study > Spring JPA' 카테고리의 다른 글
[스프링 JPA] 인증된 사용자 정보 : @WithSecurityContext 커스텀 어노테이션 생성 (0) | 2021.03.01 |
---|---|
[스프링 JPA] 로그인 기억하기 (RememberMe) (0) | 2021.02.07 |
[스프링 JPA] 로그인, 로그아웃 (0) | 2021.01.24 |
[스프링 JPA] 현재 인증된 사용자 정보 참조 (0) | 2021.01.24 |
[스프링 JPA] 회원가입 - 가입 완료 후 자동 로그인 (0) | 2021.01.24 |