- DTO에 @Pattern을 붙이면 된다

멘토님께서는 정규 표현식을 공부하는 것을 추천하지 않는다고 한다.
ChatGPT에게 물어보면서 테스트를 진행하는걸 추천하신다
요청 DTO에 정규표현식 적용
DTO(Data Transfer Object)를 생성하고, @Pattern 어노테이션을 적용하면 됩니다.
import javax.validation.constraints.Pattern;
public class UserRequest {
@Getter
@Setter
public static class JoinDTO {
@NotEmpty
@Pattern(regexp = "^[\\w._%+-]+@[\\w.-]+\\.[a-zA-Z]{2,6}$", message = "이메일 형식으로 작성해주세요")
private String email;
@NotEmpty
@Size(min = 8, max = 20, message = "8에서 20자 이내여야 합니다.")
@Pattern(regexp = "^(?=.*[a-zA-Z])(?=.*\\d)(?=.*[@#$%^&+=!~`<>,./?;:'\"\\\\[\\]{}\\\\()|-])\\S*$",
message = "영문, 숫자, 특수문자가 포함되어야하고 공백이 포함될 수 없습니다.")
}
Controller에서 정규표현식 체크
요청 DTO 앞에 @Valid 어노테이션을 추가하고, 요청 DTO 바로 뒤에 Errors errors 파라미터를 추가한다.
Spring의 DispatcherServlet은 join() 메소드가 실행 되기 직전에 요청 DTO의 정규 표현식 문법을 검사한다
에러가 발생하면 Errors erros에 틀린 모든 에러를 담아서 주입해준다.
@PostMapping("/join")
public ResponseEntity<?> join(
@RequestBody @Valid UserRequest.JoinDTO joinDTO,
Errors errors
) {
User user = User.builder()
.email(joinDTO.getEmail())
.password(passwordEncoder.encode(joinDTO.getPassword()))
.username(joinDTO.getUsername())
.roles("ROLE_USER")
.build();
userRepository.save(user);
return ResponseEntity.ok().body(ApiUtils.success(null));
}
Error 필드를 남기는 이유
프론트 단에서 어떤 파라미터가 잘못 되었는지 확인 할 수 있다
if (errors.hasErrors()) {
List<FieldError> fieldErrors = errors.getFieldErrors();
return new ResponseEntity<>(
ApiUtils.error(
fieldErrors.get(0).getDefaultMessage() + ":" + fieldErrors.get(0).getField(),
HttpStatus.BAD_REQUEST
),
HttpStatus.BAD_REQUEST
);
}

부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'DEV > Java' 카테고리의 다른 글
| Custom Exception (0) | 2023.07.18 |
|---|---|
| Body에 상태 코드를 넣는 이유 (0) | 2023.07.18 |
| H2 DB (0) | 2023.07.11 |
| JPA의 영속 상태 (0) | 2023.07.11 |
| Persist Context (0) | 2023.07.11 |
댓글