
비밀번호를 입력하지 않고 요청을 보낼 때 @Pattern, @NotBlank 가 무작위한 순서로 검증 되는 문제 점을 확인했습니다.

현재 진행 중인 프로젝트에서는 validation 의 필드에 대한 값을 핸들링하여 응답을 하기 때문에 @NotBlank 가 응답되는 것은 잘못되었다고 판단했습니다.
@GroupSequence({
NotBlankGroup.class,
PatternGroup.class,
SizeGroup.class,
EmailGroup.class
})
public interface ValidationSequence {
}
public class ValidationGroups {
public interface NotBlankGroup {}
public interface PatternGroup {}
public interface SizeGroup {}
public interface EmailGroup {}
}
원하는 순서를 지정 해야합니다.
@PostMapping
public ResponseEntity<?> join(@Validated(ValidationSequence.class) @RequestBody JoinReqDto joinReqDto) {
return ResponseEntity.status(CREATED)
.body(ResponseDto.success(CREATED, userService.join(joinReqDto)));
}
@NotBlank(message = "이메일이 입력되지 않았습니다.", groups = NotBlankGroup.class)
@Pattern(regexp = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$",
message = "이메일 형식에 맞지 않습니다.",
groups = PatternGroup.class)
@Schema(description = "이메일 형식이여야 합니다.",
example = "carumuch@gmail.com")
private String email;