문제
로그인 기능 구현 후 테스트를 진행하는데, 로그인 성공 시 반환되는 AuthResponse에서 type 값이 null로 나옴
필드 초기값을 설정했는데 왜 null로 나오는지 찾아봤다
원인
Lombok의@Builder는 필드 초기값을 전혀 사용하지 않는다고 함
아래와 같이 AuthResponse 필드에 초기값을 넣어놔도 이는 기본 생성자(new AuthResponse())를 사용할 때만 적용됨
// 인증 응답 DTO
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class AuthResponse {
private String token;
private String type = "Bearer"; // 초기값 설정
private Long id;
private String username;
private String email;
public static AuthResponse of(String token, Long id, String username, String email) {
return AuthResponse.builder()
.token(token)
.type("Bearer")
.id(id)
.username(username)
.email(email)
.build();
}
}
@Builder는 내부적으로 AllArgsConstructor를 호출하기 때문에, 어디선가 .type()이 안 들어간 Builder가 호출되면 type = null로 적용
해결
@Builder.Default를 사용하여 기본값 유지
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class AuthResponse {
private String token;
@Builder.Default // 추가한 부분
private String type = "Bearer";
private Long id;
private String username;
private String email;
public static AuthResponse of(String token, Long id, String username, String email) {
return AuthResponse.builder()
.token(token)
// .type("Bearer") 생략 가능
.id(id)
.username(username)
.email(email)
.build();
}
}
결과
type값이 잘 나오는 것을 확인할 수 있음
