작성
·
394
1
좋은 강의 정말 감사드립니다.
강의 10:47 무렵에..
아래 코드처럼 userEntity를 UserDto로 매핑한 결과를 디버그모드에서 값을 확인하는 부분이 있는데요.
UserDto userDto = new ModelMapper().map(userEntity, UserDto.class);
UserEntity에는 pwd가 설정되지 않았으므로 변환된 결과값인 userDto의 pwd 값은 null 이 나오는게 맞지 않을까요?
로그인할때 pwd값이 아래의 코드에 의해 암호화 된다는 것을 설명하신부분은 이해했습니다.
auth.userDetailsService(userService).passwordEncoder(bCryptPasswordEncoder)
사실 별로 중요하지 않은 부분이라 그냥 넘어갈수도 있지만 이상해서..
pwd 값은 어디서 왔을까? 라는 생각이 들었습니다.
혹시나 해서 Mapstruct 라는 라이브러리를 사용하여 Mapping 을 시도했을때는 아래의 이미지 처럼 null이 출력되었습니다.
제가 잘못 이해한건가요?
답변 3
3
안녕하세요, 이도원입니다.
ModelMapper에서 두 객체 간의 데이터를 전송하는 방식을 지정하기 위해 Matching Strategy를 지정할 수 있습니다. (http://modelmapper.org/user-manual/how-it-works/)
User Controlelr에서 사용자 등록할 때 사용되는 createUser() 메소드에서 처럼 MatchingStrategies를 지정하면 매칭 수위를 조절하실 수 있습니다. MatchingStrategies는 Loose, Standard, Strict 3가지로 지정할 수있으며, Strict가 매칭 수위를 가장 까다롭게 합니다. 예를 들어, 아래 이미지는 순서대로 Loose, Standard, Strict로 지정했을 때 UserDto의 pwd 값이 어떻게 달라지는지 보여주는 이미지입니다. (테스트를 하기 위해 UserDto에 decryptedPwd라는 필드를 추가하였습니다)
* Standard
* Loose
* Strict
정확하게 encryptedPwd만을 변환하시려면 MatchingStrategies를 MatchingStrategies.STRICT로 지정해서 사용해 보시기 바랍니다.
감사합니다.
0
0