// Instagram.domain.member.dto
@Getter
@Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class RegisterRequest {
@ApiModelProperty(value = "유저네임", example = "dlwlrma", required = true)
@NotBlank(message = "username을 입력해주세요")
@Length(min = 4, max = 12, message = "사용자 이름은 4문자 이상 12문자 이하여야 합니다")
@Pattern(regexp = "^[0-9a-zA-Z]+$", message = "username엔 대소문자, 숫자만 사용할 수 있습니다.")
private String username;
@ApiModelProperty(value = "이름", example = "이지금", required = true)
@NotBlank(message = "이름을 입력해주세요")
@Length(min = 2, max = 12, message = "이름은 2문자 이상 12문자 이하여야 합니다")
private String name;
@ApiModelProperty(value = "비밀번호", example = "a12341234", required = true)
@NotBlank(message = "비밀번호를 입력해주세요")
@Pattern(regexp = "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$", message = "비밀번호는 8자 이상, 최소 하나의 문자와 숫자가 필요합니다")
@Length(max = 20, message = "비밀번호는 20문자 이하여야 합니다")
private String password;
@ApiModelProperty(value = "이메일", example = "aaa@gmail.com", required = true)
@NotBlank(message = "이메일을 입력해주세요")
@Email(message = "이메일의 형식이 맞지 않습니다")
private String email;
@ApiModelProperty(value = "이메일 인증코드", example = "ABC123", required = true)
@NotBlank(message = "이메일 인증코드를 입력해주세요")
@Length(max = 6, min = 6, message = "인증코드는 6자리 입니다.")
private String code;
}
- @ApiModelProperty
Swagger 라이브러리를 사용하여 API 문서를 자동으로 생성할 때, 해당 필드에 대한 설명을 추가하는 용도
- @Pattern
주어진 정규식 패턴에 맞는 문자열만을 받아들이도록 검증하는 데 사용
여기서 사용된 정규식에는 최소 하나의 특수문자를 포함하는 조건이 없어서 포함하는 정규식을 찾아봤습니다.
^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$
- @Length
문자열 필드의 길이 범위를 지정
- @NotBlank와 @NotNull
- @NotBlank (null이 아니고, 길이가 0이 아님)
- @NotNull (null이 아님)
- 왜 DTO에서는 @Setter를 사용하는가?
DTO는 Controller와 Service 간에 데이터를 전송하기 위한 객체로 사용되는 경우가 많습니다. DTO 클래스는 데이터를 전송하기 위한 용도로 사용되기 때문에 setter 메서드를 제공하는 것이 일반적입니다.
예를 들어, Controller에서 DTO 객체를 받아서 Service로 전달할 때 setter 메서드를 사용하여 DTO 객체의 값을 변경하고, Service에서는 DTO 객체를 이용하여 데이터를 처리한 후 결과를 DTO 객체에 담아서 Controller로 전달할 수 있습니다.
- @NoArgsContructor는 왜 필요할까? 결국 내부 변수값을 넣어줘야 의미가 있어지는거 아닌가?
DI를 쉽게 해준다고 하는데 아직 잘 모르겠습니다...
UserDto user = new UserDto("John", "john@example.com");
// @NoArgsConstructor 사용시
@Autowired
private UserDto user;