Today I Learn ✍🏼
- 오늘 하루 가장 인상 깊었던 배움에는 뭐가 있었지?
- 그 배움까지 다가가는데 어떤 어려움이 있었지?
- 그 어려움을 해결하기 위한 나의 시도들은 무엇이 있었지?
- 그 과정에서 나는 무엇을 깨달았고, 어떤 감정/생각이 들었었지?
- 이 상태에서 이후 더 나은 내가 되려면 무엇을 보완하지?
package com.coopang.user.presentation.request;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import lombok.Getter;
import lombok.Setter;
import java.util.UUID;
@Getter
@Setter
public class SignupRequestDto {
@NotBlank(message = "Email is required")
@Email(message = "Email should be valid")
private String email;
@NotBlank(message = "Password is required")
@Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,15}$",
message = "Password must contain at least one uppercase letter, one lowercase letter, one number, and one special character")
private String password;
@NotBlank(message = "Username is required")
@Pattern(regexp = "^[a-zA-Z가-힣 ]{2,10}$", message = "Username must contain only letters, Korean characters, and optional spaces")
private String userName;
private String phoneNumber;
@NotBlank(message = "Role is required.")
private String role;
private String slackId;
private String zipCode;
private String address1;
private String address2;
private UUID nearHubId;
}
package com.coopang.user.application.request;
import lombok.Builder;
import lombok.Getter;
import java.util.UUID;
@Getter
public class UserDto {
private UUID userId;
private String email;
private String password;
private String userName;
private String phoneNumber;
private String role;
private String slackId;
private String zipCode;
private String address1;
private String address2;
private UUID nearHubId;
@Builder
public UserDto(
UUID userId
, String email
, String password
, String userName
, String phoneNumber
, String role
, String slackId
, String zipCode
, String address1
, String address2
, UUID nearHubId
) {
this.userId = userId;
this.email = email;
this.password = password;
this.userName = userName;
this.phoneNumber = phoneNumber;
this.role = role;
this.slackId = slackId;
this.zipCode = zipCode;
this.address1 = address1;
this.address2 = address2;
this.nearHubId = nearHubId;
}
public static UserDto of(
UUID userId
, String email
, String password
, String userName
, String phoneNumber
, String role
, String slackId
, String zipCode
, String address1
, String address2
, UUID nearHubId
) {
return UserDto.builder()
.userId(userId)
.email(email)
.password(password)
.userName(userName)
.phoneNumber(phoneNumber)
.role(role)
.slackId(slackId)
.zipCode(zipCode)
.address1(address1)
.address2(address2)
.nearHubId(nearHubId)
.build();
}
@Override
public String toString() {
return "UserDto{" +
"userId=" + userId +
", email='" + email + '\'' +
", password='" + password + '\'' +
", userName='" + userName + '\'' +
", phoneNumber='" + phoneNumber + '\'' +
", role='" + role + '\'' +
", slackId='" + slackId + '\'' +
", zipCode='" + zipCode + '\'' +
", address1='" + address1 + '\'' +
", address2='" + address2 + '\'' +
", nearHubId=" + nearHubId +
'}';
}
public void createId(UUID userId) {
this.userId = userId;
}
}
org.modelmapper.MappingException: ModelMapper mapping errors:
1) Failed to instantiate instance of destination com.coopang.user.application.request.UserDto. Ensure that com.coopang.user.application.request.UserDto has a non-private no-argument constructor.
1 error
org.modelmapper.MappingException이 발생하는 이유는 ModelMapper가 매핑할 때 기본 생성자가 필요하기 때문입니다. UserDto 클래스에 기본 생성자가 없어서 인스턴스 생성을 할 수 없는 상황입니다.
ModelMapper는 기본적으로 no-argument constructor(기본 생성자)를 사용하여 객체를 생성한 후 필드를 설정합니다. 하지만 UserDto 클래스는 @Builder를 사용하고 있고, 기본 생성자가 없기 때문에 ModelMapper가 이를 생성하지 못하고 있습니다.
해결 방법:
- 기본 생성자 추가: UserDto에 기본 생성자를 추가하면 ModelMapper가 인스턴스를 생성할 수 있습니다. 아래와 같이 기본 생성자를 추가해 주세요.
'기술 블로그 (Tech Blog) > Project-coopang' 카테고리의 다른 글
local 통합 테스트 (0) | 2024.10.25 |
---|---|
슬랙으로 메세지 보내기 (0) | 2024.10.23 |
gateway 라우팅 에러 해결하기 (0) | 2024.10.16 |
협업 과정에서의 문제 해결과 카프카 메시징 구조 개선 (0) | 2024.10.14 |
@Component, @Configuration + @ConfigurationProperties (0) | 2024.10.02 |