반응형

🏁 학습할 내용
- 설치 방법
- 어노테이션 종류
- 주의 사항
⬇️ 설치
implementation("org.springframework.boot:spring-boot-starter-validation")
2️⃣ 어노테이션 종류
✅ 문자열(String) 관련
| 어노테이션 | 설명 | 예시 |
| @NotBlank | null, 빈 문자열, 공백만 있는 문자열 ❌ | " " → 실패 |
| @NotEmpty | null ❌, 길이 0 ❌ (공백은 허용) | "" → 실패 |
| @NotNull | null만 ❌ | null → 실패 |
| @Size(min, max) | 문자열 길이 범위 제한 | @Size(min=2, max=10) |
| @Pattern(regexp) | 정규식 패턴 검사 | 이메일, 전화번호 등 |
| 이메일 형식 검사 | test@email.com |
🔢 숫자(Number) 관련
| 어노테이션 | 설명 | 예시 |
| @NotNull | null ❌ | |
| @Min(value) | 최소값 이상 | @Min(0) |
| @Max(value) | 최대값 이하 | @Max(100) |
| @Positive | 양수 (> 0) | |
| @PositiveOrZero | 0 이상 | |
| @Negative | 음수 (< 0) | |
| @NegativeOrZero | 0 이하 | |
| @DecimalMin(value) | 실수 최소값 | "0.0" |
| @DecimalMax(value) | 실수 최대값 | "99.9" |
| @Digits(integer, fraction) | 정수부/소수부 자릿수 제한 | @Digits(integer=5, fraction=2) |
📅 날짜/시간 관련
| 어노테이션 | 설명 |
| @Past | 과거 날짜만 허용 |
| @PastOrPresent | 과거 또는 현재 |
| @Future | 미래 날짜만 허용 |
| @FutureOrPresent | 현재 또는 미래 |
📦 컬렉션/배열 관련
| 어노테이션 | 설명 |
| @NotEmpty | null ❌, 비어있음 ❌ |
| @Size(min, max) | 요소 개수 제한 |
🎯 Boolean 관련
| 어노테이션 | 설명 |
| @AssertFalse | false 여야 통과 |
| @AssertTrue | true 여야 통과 |
🧩 Hibernate Validator 전용 (확장)
| 어노테이션 | 설명 |
| @Range(min, max) | 숫자 범위 제한 (@Min + @Max) |
| @Length(min, max) | 문자열 길이 제한 (@Size와 유사) |
| @URL | URL 형식 검사 |
| @CreditCardNumber | 카드 번호 형식 검사 |
⚠️ 주의사항
☕ JAVA가 아니라서..
다른 어노테이션은 @ABC로 편하게 썻지만, Bean Validation은 필드 기준으로 동작하고
코틀린의 기본 어노테이션 위치는 property 라서 검증 동작이 안 먹는 경우가 있음
그래서, 다음과 같이 써야함
class QuestionForm(
@field:NotEmpty(message = "제목은 필수 항목입니다.")
@field:Size(max = 200)
val subject: String,
@field:NotEmpty(message = "내용은 필수항목입니다.")
val content: String
)
🔎 검증 결과는 반드시, @Valid 파라미터 뒤에
파라미터 @Valid를 붙히면 해당 클래스 안에 있는 Validation 어노테이션 검사가 동작한다.
이후, 그 결과가 BindingResult타입으로 전달되는데, 순서가 뒤에 있어야 정확한 검증 결과가 도착한다.
@PostMapping("/create")
fun questionCreate(
@Valid questionForm: QuestionForm,
bindingResult: BindingResult
): String {
if (bindingResult.hasErrors()) {
return "question_form"
}
questionService.create(questionForm.subject, questionForm.content)
return "redirect:/question/list"
}
출처
반응형
'Spring > 어노테이션' 카테고리의 다른 글
| RequestParam (0) | 2026.01.17 |
|---|---|
| Request 어노테이션 (0) | 2026.01.17 |
| @ResponseStatus (0) | 2026.01.10 |
| @PathVariable (0) | 2026.01.10 |
| @ResponseBody (0) | 2025.12.21 |