🔥 들어가기에 앞서...
프로젝트 pom.xml > dependencies 태그에 2개의 dependency 추가
▲ Bean Validation API >>> 2.0.1 Final
▲ Hibernate Validator Engine >>> 6.2.5 Final
어노테이션 | 설명 |
---|---|
@AssertTrue | true면 정상 |
@AssertFalse | false면 정상 |
@Max | 최대 value 값 |
@Min | 최소 value 값 |
@DecimalMax(value=, inclusive=true/false) | 최대 value 값(실수) / true:<=, false:< |
@DecimalMin(value=, inclusive=true/false) | 최소 value 값(실수) / true:>=, false:> |
@Null | Null 이어야 한다. (값이 없어야 정상) |
@NotNull | Null 이 아니어야한다. (값이 있어야 정상) |
@Degit(integer=, fraction=) | 숫자 자리수 >>> integer(정수형) fraction(소수점자리수) |
@Size(min=, max=) | 글자 자리수 |
@Pattern(regexp=) | 정규식 만족하면 정상 |
@NotEmpty | 값이 있어야 정상! (띄어쓰기 인정) |
@NotBlank | 값이 있어야 정상! (띄어쓰기 제외) |
@Positive | 양수가 들어와야 정상 |
@PositiveOrZero | 양수 + 0 까지 인정 |
@Negative | 음수가 들어오면 정상 |
@NegativeOrZero | 음수 + 0 까지 인정 |
이메일 형식이 맞으면 정상 |
import javax.validation.constraints.Max;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
public class InputFormDto {
@Size(min = 8, max = 14)
String input1;
@Max(1000)
String input2;
@NotBlank
String input3;
public String getInput1() {
return input1;
}
public void setInput1(String input1) {
this.input1 = input1;
}
public String getInput2() {
return input2;
}
public void setInput2(String input2) {
this.input2 = input2;
}
public String getInput3() {
return input3;
}
public void setInput3(String input3) {
this.input3 = input3;
}
}
#valid_view 페이지 inputFormDto 에러 메시지
Size.inputFormDto.input1=8~14자리로 입력해주세요.
Max.inputFormDto.input2=5000 아래로 입력해주세요.
NotBlank.inputFormDto.input3=필수 입력 항목입니다.
@Controller
public class ValidationController {
@GetMapping("/valid_form")
public String valid() {
return "valid_form";
}
@PostMapping("/valid_form")
public String valid_input(@Valid InputFormDto inputFormDto,
BindingResult bindingResult,
Model model) {
//@Valid 요청으로부터 들어온 값을 inputFormDto 객체에 매핑시키고
//내부에 Valid 검증 유효성 기준으로 검증을 수행해달라
// >>> Dto 상의 조건과 Valid는 세트임!!!
// >>> 이후 잘못된 값은 BindingResult에 담아줌
// >>>>>>> BindingResult로 유효성 검증! <<<<<<<
if(bindingResult.hasErrors()) {
model.addAttribute("isError", "true");
return "valid_form"; //잘못입력했으니 다시 입력페이지로 돌리기!
}
return "valid_end";
}
}
최상단에
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
추가하기 !!
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
.errMsg{
color:red;
font-style:italic;
}
</style>
</head>
<body>
<h1>valid_view</h1>
<form action="" method="post">
<label>input1<input type="text" name="input1" value="${inputFormDto.input1}"></label><br/>
<span class="errMsg">
<spring:hasBindErrors name="inputFormDto">
<c:if test="${errors.hasFieldErrors('input1')}">
<spring:message code="${errors.getFieldError('input1').codes[0]}"/>
</c:if>
</spring:hasBindErrors>
</span>
<hr/>
<label>input2<input type="text" name="input2" value="${inputFormDto.input2}"></label><br/>
<span class="errMsg">
<spring:hasBindErrors name="inputFormDto">
<c:if test="${errors.hasFieldErrors('input2')}">
<spring:message code="${errors.getFieldError('input2').codes[0]}"/>
</c:if>
</spring:hasBindErrors>
</span>
<hr/>
<label>input3<input type="text" name="input3" value="${inputFormDto.input3}"></label><br/>
<span class="errMsg">
<spring:hasBindErrors name="inputFormDto">
<c:if test="${errors.hasFieldErrors('input3')}">
<spring:message code="${errors.getFieldError('input3').codes[0]}"/>
</c:if>
</spring:hasBindErrors>
</span>
<hr/>
<c:if test="${isError == true}">
입력 내용을 확인해주세요.
</c:if>
<br>
<button type="submit">보내기</button>
</form>
</body>
</html>
↓↓↓↓↓ 유효성 검증 실행결과 ↓↓↓↓↓