- 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
);
}
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
728x90
'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 |