티스토리 뷰

dto를 사용하여 데이터를 받는 와중에 ModelMapper Strategies 설정으로 인해 몇 시간을 붙잡았다.

 

ModelMapper는 객체간을 연결하는데 있어 아주 중요하게 사용하고 있기에 차근차근 정리하기로 했다.

 

@Bean
    public ModelMapper getMapper() {
        ModelMapper modelMapper = new ModelMapper();
        modelMapper.getConfiguration()
                .setFieldMatchingEnabled(true)
                .setFieldAccessLevel(org.modelmapper.config.Configuration.AccessLevel.PRIVATE)
                .setMatchingStrategy(MatchingStrategies.LOOSE);

        return modelMapper;
    }

위 코드에서 .setMatchingStrategy 이 전략에 따라 맵핑하는 객체간 속성들이 어떻게 구성되어야 하는지 이해해야 할 것 같다.

 

modelMapper.map(갖고 온 자원(resource), 매핑하려는 목적클래스(destination).class)

resource 와 destination 을 이해하려고 작성한 아주 간단한 예시

 

 

http://modelmapper.org/user-manual/configuration/#matching-strategies

MatchingStrategies 종류
STANDARD
LOOSE
STRICT
STANDARD

Default 설정

모든 destination 속성이 일치하고 모든 resource 속성 이름에 하나 이상의 토큰이 일치해야한다.

  • 토큰은 '어떤 순서'로든 일치시킬 수 있다.
  • '모든' destination 속성 이름 토큰이 일치해야 된다.
  • '모든' resource 속성 이름에는 하나 이상의 토큰이 일치 해야 한다.

 

LOOSE

마지막 destination 속성 '만' 일치하도록 요구하여 느슨하게 일치시킬 수 있음

  • 토큰은 '어떤 순서' 로든 일치시킬 수 있다.
  • '마지막' destination 속성 이름에는 모든 토큰이 일치 해야 한다.
  • '마지막' resource 속성 이름에는 하나 이상의 토큰이 일치 해야 한다.

즉, 객체간 속성이 일치하지 않아도 대충대충 연결이 된다는 뜻(코에걸면 코걸이, 귀에걸면 귀걸이)

 

STRICT

완전한 일치를 허용하여 불일치나 모호성이 발생하지 않도록 한다.

resource 측과 destination 측의 속성 이름 토큰이 서로 정확하게 일치해야 한다.

  • 토큰은 '엄격한 순서' 로 일치해야 한다.
  • '모든' destination 속성 이름 토큰이 일치해야 한다.
  • '모든' resource 속성 이름에는 모든 토큰이 일치 해야 합니다.

이걸 잘못 사용해 계속해서 연결한 객체에서 특정 컬럼이 null로 들어오는 오류가 있었다.

가장 권장되는 방법이지만 그만큼 유의해서 사용해야 한다

'Backend > SpringBoot' 카테고리의 다른 글

디자인패턴 - SingleTone  (0) 2023.01.24
양방향맵핑과 'mappedBy'  (0) 2022.12.30
Ajax 와 Json, 그리고 Rest방식  (1) 2022.12.26
ModelMapper  (0) 2022.12.25
Thymeleaf 기본문법  (0) 2022.12.23
Comments