Develop
[Spring-Boot] Bean Validator 라이브러리 이용하여 유효성 검사하기 본문
<form:form> 태그를 사용해봤으니
이제 Bean Validator 라이브러리 이용하여 유효성을 검사해보겠다
먼저 사용하기 전에 pom.xml에 Maven Dependency를 추가해야한다.
<!-- validation -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
1. VO에 유효성 검사 규칙 추가하기
어노테이션을 이용하여 간단하게 검사 규칙을 추가할 수 있다
noticeVO
package com.example.demo.domain;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
import org.apache.ibatis.type.Alias;
import lombok.Data;
@Data
@Alias("noticeVO")
public class NoticeVO {
private int noNum; // 게시글 번호(AI) no_num
//@NotBlank(message="제목을 입력해주세요.")
@Pattern(regexp = "[a-zA-Z0-9ㄱ-힣]{1,30}", message = "최소 1자, 최대 30자까지 입력 가능하며 영문, 숫자, 한글만 입력 가능합니다.")
private String noTitle; // 제목
//@NotBlank(message="내용을 입력해주세요.")
@Pattern(regexp = "[a-zA-Z0-9ㄱ-힣]{1,300}", message = "최소 1자, 최대 300자까지 입력 가능하며 영문, 숫자, 한글만 입력 가능합니다.")
private String noContent; // 내용
private String noFile; // 파일 경로
private String noState; // 글 상태
}
나는 pattern을 이용하였다.
뒤에오는 message는 해당 유효성 검사를 통과하지 못했을 때 나타나는 메세지이다.
빈 밸리데이터 어노테이션 종류
@Null // null만 혀용한다.
@NotNull // null을 허용하지 않는다. "", " "는 허용한다.
@NotEmpty // null, ""을 허용하지 않습니다. " "는 허용한다.
@NotBlank // null, "", " " 모두 허용하지 않는다.
@Email // 이메일 형식을 검사한다. 다만 ""의 경우를 통과 시킨다. @Email 보다 아래 나올 @Patten을 통한 정규식 검사를 더 많이 사용한다.
@Pattern(regexp = ) // 정규식을 검사할 때 사용된다.
@Size(min=, max=) // 문자길이를 제한할 때 사용하며, int는 불가다
@Max(value = ) // 숫자 value 이하의 값을 받을 때 사용된다.
@Min(value = ) // 숫자 value 이상의 값을 받을 때 사용된다.
@Pattern(regexp = ) // 정규표현식으로 검증식 세울 수 있다.
@Positive // 값을 양수로 제한한다.
@PositiveOrZero // 값을 양수와 0만 가능하도록 제한한다.
@Negative // 값을 음수로 제한한다.
@NegativeOrZero // 값을 음수와 0만 가능하도록 제한한다.
@Future // 현재보다 미래
@Past // 현재보다 과거
@AssertFalse // false 여부, null은 체크하지 않는다.
@AssertTrue // true 여부, null은 체크하지 않는다.
@Valid // 해당 object validation 실행
2. Controller 수정
Controller
// 글쓰기 POST
@PostMapping("/write")
public String writePOST(@Valid @ModelAttribute("noticeVO") NoticeVO noticeVO, BindingResult bindingResult) throws Exception {
logger.info("글 정보 noticeVO : " + noticeVO);
// 검증 실패시 다시 입력 페이지로
if(bindingResult.hasErrors()) {
logger.info("errors={}", bindingResult);
return "/notice/write";
}
// 검증 성공시
nService.write(noticeVO);
return "redirect:/notice/main";
}
1. 매개변수 앞에 @Valid 어노테이션을 달아줘야한다.
@Valid @ModelAttribute("noticeVO") NoticeVO noticeVO
2. 매개변수 뒤에 BindingResult를 추가해야한다.
(꼭 유효성 검사를 하는 매개변수 뒤쪽에 추가해야함!)
BindingResult bindingResult
3. 컨트롤러 안에 검증 실패시 다시 입력 폼이 있는 페이지로 가도록 한다.
// 검증 실패시 다시 입력 페이지로
if(bindingResult.hasErrors()) {
logger.info("errors={}", bindingResult);
return "/notice/write";
}
3. view단에 에러메세지 위치 추가
JSP
<body>
<h1>write.jsp</h1>
<form:form action="/notice/write" method="post" modelAttribute="noticeVO" enctype="">
제목 <form:input path="noTitle" placeholder="제목"/>
<form:errors path="noTitle" class="error_text"/> <br><br>
내용 <form:textarea path="noContent" />
<form:errors path="noContent" class="error_text"/> <br>
<br>
<hr>
<input type="submit" value="등록하기">
<input type="button" value="돌아가기" onclick="location.href='/notice/main'">
</form:form>
</body>
유효성 검사를 통과하지 않았을 때 나오는 메세지를
어디다가 표현할 것인지 적어줘야한다.
<form:errors path="noTitle" class="error_text"/>
noTitle 이 유효성 검사를 통과하지 못했을 때 에러메세지는 여기에 나타난다.
결과
+) 나는 class="error_text" 를 통해 메세지를 빨간색으로 바꿔주었다.
<style>
.error_text{
color: RED;
}
참고한 글
[Spring Boot] Validation 적용하는 법 - BindingResult 적용하기 (velog.io)
[Spring Boot] Validation 적용하는 법 - BindingResult 적용하기
spring boot 2.3 version 이상부터는 spring-boot-starter-web 의존성 내부에 있던 validation이 사라졌습니다.때문에 사용하시는 spring boot version이 2.3 이상이라면 validation 의존성을 따로 추가해주셔야
velog.io
'웹 개발 > Spring' 카테고리의 다른 글
[Spring] Eclipse 설치 (1) | 2024.06.13 |
---|---|
[Spring Boot] Tiles 기본 설정 및 사용법 + 예제 (1) | 2024.03.09 |
[Spring-Boot] Spring form : <form:form> 폼폼 태그 사용법 (0) | 2024.03.07 |
[Spring-Boot] maven 새 프로젝트 만들기 (0) | 2024.03.06 |
[spring-Boot] Tiles3 import Error (Spring 3.0버전 이상) (2) | 2024.03.05 |