<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.6</version>
</dependency>
pom.xml 추가
1) The destination property Account.setEmail() matches multiple source property hierarchies:
com.studyolle.settings.Notifications.isStudyCreatedByEmail()
위와 같은 에러가 발생.
setStudyCreatedByEmail() 이 아니라 setEmail()이 적용된 부분을 보고 설정 부분에 문제가 있다는 예상이 되었다.
확인 해보니 studyCreatedByEmail()의 필드를 보면 CamelCase로 변수명이 길게 선언이 되어있기때문에 modelMapper의 기본설정으로는 매핑이 잘 되지 않는다. 따라서 변수명이 언더스코어가 아닐경우 하나의 변수명으로 설정하기위해서
아래의 설정을 추가한다.
package com.studyolle.config;
import org.modelmapper.ModelMapper;
import org.modelmapper.convention.NameTokenizers;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
public class AppConfig {
@Bean
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
@Bean
public ModelMapper modelMapper() {
ModelMapper modelMapper = new ModelMapper();
// 필드명이 언더스코어가 아니라면 하나의 변수명으로 설정
modelMapper.getConfiguration()
.setDestinationNameTokenizer(NameTokenizers.UNDERSCORE)
.setSourceNameTokenizer(NameTokenizers.UNDERSCORE);
return new ModelMapper();
}
}
이후 에러없이 잘 적용되는 것을 볼 수 있다.