본문 바로가기

기술 블로그 (Tech Blog)/Project-coopang

mapper

 

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가 이를 생성하지 못하고 있습니다.

해결 방법:

  1. 기본 생성자 추가: UserDto에 기본 생성자를 추가하면 ModelMapper가 인스턴스를 생성할 수 있습니다. 아래와 같이 기본 생성자를 추가해 주세요.