반응형
❓ 폼 입력값 유효성 체크
- 서버 사이드에서 폼 입력값에 대한 유효성을 체크하는 것
- Spring MVC는 폼 입력값에 대한 유효성 체크를 지원하는 API를 제공한다.
라이브러리 의존성
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!--
* jakarta.validation-api와 hibernate-validator 의존성을 추가한다.
* jakarta.validation-api는 자바 표준 유효성 검사 스펙에 따른 API를 제공한다.
이 스펙은 JSR-380(Java Specification Request 380)으로 정의되며,
자바기반 애플리케이션에서 데이터 모델의 유효성을 검사하는 데 사용되는 표준이다.
* hibernate-validator는 jakarta.validation-api의 구현체다.
-->
📌 Spring의 폼 입력값 유효성 체크 API
1. @Valid
- jakarta.validation 패키지에 정의되어 있는 어노테이션
- 데이터 모델의 유효성 검사를 활성화시키는 데 사용된다.
- 이 어노테이션을 사용하면 데이터 모델에 대한 정의된 유효성 검사 어노테이션을 검사하고,
데이터 모델이 제약조건을 위반한 경우, 해당 검사 오류를 BindingResult 객체에 추가한다.
2. BindingResult
- 스프링에서 유효성 검사 결과 및 데이터 바인딩 오류를 저장하고 관리하는 데 사용하는 객체
- Spring MVC의 요청핸들러 메서드에서 @Valid 어노테이션과 함께 사용되며,
데이터 모델의 유효성 검사를 수행한 후 발생한 오류를 수집하고, 관리한다. - 주요 메서드
- boolean hasErrors()
- 유효성 검사를 위반한 경우 true를 반환한다.
- 유효성 검사를 위반할 때마다 FieldError 객체가 BindingResult 객체에 추가된다.
- void rejectValue(String field, String errorCode, String defaultMessage)
- BindingResult 객체에 수동으로 field error를 추가시킨다.
- @어노테이션으로 지원되지 않는 유효성 체크 항목에 대한 유효성을 수동으로 체크하고, field error를 추가시킬 수 있다.
* field : Form 객체의 멤버변수명
* errorCode : 에러코드
* defaultMessage : 에러 메시지
- boolean hasErrors()
- 예시)
1) form.jsp
<form:form method="post" action="register">
아이디
<form:input path="id" />
비밀번호
<form:password path="password" />
이름
<form:input path="name" />
</form:form>
2) UserRegisterForm.java
public class UserRegisterForm {
@NotBlank // 제약조건
String id;
@NotBlank // 제약조건
Stirng password;
@NotBlank // 제약조건
String name;
}
3) 요청핸들러 메서드
@PoastMapping("/register")
public String register(@Valid UserRegisterForm userRegisterForm, BindingResult errors) {
}
💡 자동으로 체크되는 원리
pom.xml에 spring-boot-starter-validation 정의해놓으면
hibernate-validator가 실제로 유효성 체크를 구현해줌
< 해당 글은 velog에서 이전하며 옮겨온 글로, 가독성이 좋지 않을 수 있는 점 양해 부탁드립니다. >
🔗 velog 버전 보기 : https://velog.io/@ryuneng2/Spring-유효성-체크
'BackEnd > Spring' 카테고리의 다른 글
[Spring] 의존성 주입 받는 방법 2가지 (@Autowired, @RequiredArgsConstructor) (0) | 2025.01.17 |
---|---|
[Spring] Model에 값을 저장하는 방법 2가지(Form클래스), 폼 입력값 유효성 체크 (0) | 2025.01.17 |
[Spring] 애플리케이션 로깅(Logging) (0) | 2025.01.17 |
[Spring] 메타어노테이션(@Target, @Retention, @Documented 등) (0) | 2025.01.17 |
[Spring] YAML 이란? (Feat. JSON, XML) (0) | 2025.01.17 |