[스프링부트] 자동 주입[@RequiredArgsConstructor]과 명시적 생성자의 차이

JEONG SUJIN·4일 전
0
<h1>마이페이지</h1>
<p id="useruid">사용자 UID: </p>
<p id="useremail">이메일: </p>


<script>
 // 사용자 정보
document.getElementById("useruid").innerText = `사용자 ID: ${data.uid}`;
document.getElementById("useremail").innerText = `이메일: ${data.email}`;
</script>

부분을 할때

PrincipalDetails userDetails = (PrincipalDetails) authentication.getPrincipal();
System.out.println("📌 인증된 사용자 UID: " + userDetails.getUsername()); // 확인용


response.put("uid", userDetails.getUsername());
response.put("email", userDetails.getUserDto().getEmail());

getUserDto().getEmail()) 부분에서 사용자를 찾을 수 없다는 메시지가 나와서 확인해보니,PrincipalDetails 부분에서
‼️ userDto을 초기화를 제대로 하지않아서 발생한 오류였음.

@RequiredArgsConstructor는 모든 final 필드를 매개변수로 받는 생성자를 자동 생성해 줘.
문제는 userDto는 UserDto.fromEntity(user); 를 통해 변환해야 하는데, 자동 생성된 생성자는 이를 처리하지 못함! ❌

@RequiredArgsConstructor
public class PrincipalDetails implements UserDetails {

private final User user;  // User 엔티티를 직접 사용
    private final UserDto userDto; // ❌ @RequiredArgsConstructor로 해결되지 않음
}
    public PrincipalDetails(User user) { //직접 생성자 작성
    	this.user=user;
    	this.userDto=UserDto.fromEntity(user); // UserDto를 변환해서 초기화
    }

    }

이렇게 생성하고 다시 확인하면 제대로
userDetails.getUserDto().getEmail()); 제대로 출력됨!

profile
기록하기

0개의 댓글