티스토리 뷰
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
최근에 올라온 글
최근에 달린 댓글
TAG
- 다음 큰 숫자
- 스프링부트
- 알고리즘
- 토스페이먼츠
- script setup
- 객체 지도
- 맥 error
- Vue.js3
- 짝지어제거하기
- 책리뷰
- 프로그래머스
- 타임리프
- 정수형으로 변환
- for
- JWT
- 함께모으기
- it책 리뷰
- vuex
- vue.js
- 한권으로끝내기리눅스마스터2급
- java 플레이그라운드
- 리눅스마스터2급
- LEVEL2
- 객체지향의 사실과 오해
- 객체지향
- CompositionAPI
- mybatis구현
- SpringSecurity
- springboot
- pinia
- Total
- Today
- Yesterday