본문 바로가기

카테고리 없음

ModelMapper 적용 에러 - CamelCase 미인식 문제

<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();
    }

}

 

이후 에러없이 잘 적용되는 것을 볼 수 있다.