Spring Validation ํผ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ Validator, @Vaild

2021. 11. 26. 11:40ใ†Spring

728x90

 

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š”๋ฐ ์žˆ์–ด ํผ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ์€ ๋ฐ˜๋“œ์‹œ ํ•ด์•ผํ•˜๋Š” ๊ณผ์ • ์ค‘ ํ•˜๋‚˜์ด๋‹ค. 

๋จผ์ € ํด๋ผ์ด์–ธํŠธ์—์„œ submit ํ•˜๊ธฐ์ „์— ๊ฒ€์ฆ์„ ํ•ด์ค˜์•ผํ•˜๊ณ ,  (JavaScript)

๊ทธ ๋‹ค์Œ ์„œ๋ฒ„์—์„œ๋„ ๊ฒ€์ฆ์„ ํ•ด์ค˜์•ผํ•œ๋‹ค. (Servlet, jsp..)

์˜ˆ์ œ์—์„œ๋Š” ๊ฐ„๋‹จํ•œ๊ฒŒ 

์ด๋ ‡๊ฒŒ uid, ์ž‘์„ฑ์ž, ์ œ๋ชฉ์„ ์ž…๋ ฅ๋ฐ›๋Š” ์˜ˆ์ œ์ด๋‹ค. 

 

BoardController
Controller

write.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Write Page</title>
</head>
<body>
	<form action="writeOk.do">
		uid(<span>์ˆซ์ž</span>) : <input type="text" name="uid" value="${w.uid }"><br>
		์ž‘์„ฑ์ž(<span>*</span>) : <input type="text" name= "name" value="${w.name }"><br>
		์ œ๋ชฉ : <input type="text" name="subject" value="${w.subject }"> <br>
		
		<input type="submit" value="๋“ฑ๋ก">
	</form>
	
</body>
</html>

 

writeOk.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>WriteOk Page</title>
</head>
<body>
	uid : ${w.uid } <br>
	์ž‘์„ฑ์ž : ${w.name }<br>
	์ œ๋ชฉ : ${w.subject }<br>
	<button onclick="history.back()">๋Œ์•„๊ฐ€๊ธฐ</button>
</body>
</html>

 

์—ฌ๊ธฐ์„œ uid๋Š” ๋น„์–ด์žˆ์œผ๋ฉด ์•ˆ๋˜๋ฉฐ ์ˆซ์ž๋งŒ ์ž…๋ ฅํ•ด์•ผํ•˜๋ฉฐ, 

์ž‘์„ฑ์ž ์—ญ์‹œ ๋น„์–ด์žˆ์œผ๋ฉด ์•ˆ๋˜๋„๋ก ์„ค์ •ํ•  ๊ฒƒ์ด๋‹ค.

 

1๏ธโƒฃ BindingResult 

BindingResult ๋งค๊ฐœ๋ณ€์ˆ˜ ์—ญ์‹œ Dispatcher์—์„œ ์ž๋™ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๊ฐ์ฒด๋กœ 

validator๊ฐ€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ด๊ธด ๊ฐ์ฒด์ด๋‹ค. 

result์—๋Š” ๋”ฐ๋ผ์„œ validator๊ฐ€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ด๊ธด ๊ฐ์ฒด์ด๋‹ค. 

์ˆซ์ž์— ์•„๋ฌด๊ฐ’๋„ ์ ์ง€ ์•Š๊ณ  ๋“ฑ๋ก ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ๋„ 

์—๋Ÿฌ ์—†์ด 0์œผ๋กœ ๋ฐ”๋€๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค 

(์›๋ž˜๋Š” 500 ์—๋Ÿฌ๊ฐ€ ๋– ์•ผํ•œ๋‹ค.)

ํผ ๋ฐ์ดํ„ฐ์˜ ์˜ค๋ฅ˜ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด result.getErrorCount()๋ฅผ ํ•ด๋ณด์•˜๋‹ค. 

์ •์ƒ์ ์œผ๋กœ ๋“ฑ๋ก๋˜์—ˆ๋‹ค๋ฉด 0์ด๊ฒ ์ง€๋งŒ ์ง€๊ธˆ์€ uid์— ์•„๋ฌด๊ฐ’๋„ ์ž…๋ ฅํ•˜์ง€ ์•Š์•˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๊ฐœ์ˆ˜๊ฐ€ 1์ด ์ถ”๋ ฅ๋œ ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

2๏ธโƒฃ Validator ํด๋ž˜์Šค ์ž‘์„ฑ ( implements Validator)

validate()๋Š” ์ฃผ์–ด์ง„ ๊ฐ์ฒด์— ๋Œ€ํ•ด ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•˜๊ณ , 

์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์ฃผ์–ด์ง„ ๊ฐ์ฒด์— ์ด ์˜ค๋ฅ˜๋“ค์„ errors์— ๋“ฑ๋กํ•œ๋‹ค. 

Controller

์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” ๋“ฑ๋ก๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ๋™์ž‘ํ•˜๋Š” writeOk.do ์— ๋“ฑ๋กํ•ด์•ผํ•œ๋‹ค. 

๋”ฐ๋ผ์„œ writeOk ํ•ธ๋“ค๋Ÿฌ ๋ฉ”์„œ๋“œ์— Validator ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  dto ๊ฐ์ฒด์™€ validator๊ฐ€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ด๊ธด ๊ฐ์ฒด์ธresult๊ฐ’์„ ๋„˜๊ธด๋‹ค. 

 

 

3๏ธโƒฃ error ์ถœ๋ ฅ์„ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ showErrors

 ์œ ํšจ์„ฑ ๊ฒ€์ฆ ํ›„์— ์—๋Ÿฌ๊ฐ€ ์žˆ๋‹ค๋ฉด ์›๋ž˜ ํผ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค. 

๋”ฐ๋ผ์„œ 

์ด๋ ‡๊ฒŒ ์ง€์ •์„ ํ•ด์ค˜ ์›๋ž˜ ์ž‘์„ฑํ–ˆ๋˜ ๊ฐ’๋“ค์ด ์—๋Ÿฌ๊ฐ€ ์žˆ์–ด ๋Œ์•„๊ฐ”์„๋•Œ๋„ ๋ณด์ผ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. 

์ด๋ฒˆ์—๋„ uid์— ์•„๋ฌด๊ฐ’๋„ ์ž…๋ ฅํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด validate ์ „์— ์ด๋ฏธ ๋ฐ”์ธ๋”ฉ์—์„œ ํ•˜๋‚˜ ์—๋Ÿฌ๊ฐ€ ๋ฐœ๊ฒฌ๋˜๊ณ , 

์•„๋ฌด๊ฐ’๋„ ์ž…๋ ฅํ•˜์ง€ ์•Š๊ณ  ๋“ฑ๋ก์„ ํ•˜๋ฉด 0์ด ๋˜๋Š”๋ฐ ์ด๋•Œ uid๊ฐ€ 0์ด๋ฉด invaliduid๋ฅผ ์ง€์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— 

validate ํ›„์— ์—๋Ÿฌ๊ฐœ์ˆ˜๊ฐ€ 2๋กœ ๋Š˜์–ด๋‚ฌ๋‹ค. 

 

 

์ด๋ฒˆ์—” uid, ์ž‘์„ฑ์ž ๋ชจ๋‘ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์•˜๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“  validtor์— ์˜ํ•ด 2๊ฐœ์˜ ์—๋Ÿฌ๊ฐ€ ์ถ”๊ฐ€ ๋“ฑ๋ก๋˜์—ˆ๋‹ค.

 

 

4๏ธโƒฃ ValidationUtils 

ValidationUtils ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด validate() ๋ฉ”์„œ๋“œ๋ฅผ ์ข€ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

์ œ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ œ๋ชฉ์„ ๋น„์šฐ๋ฉด ์•ˆ๋˜๋„๋ก ์„ค์ •ํ•  ๊ฒƒ์ด๋‹ค. 

์ด๋ ‡๊ฒŒ ValidationUtils.rejectIfEmptyOrWhitespace(errors, "subject", "emptySubject");

๋กœ ์ง€์ •ํ•ด์ค€๋‹ค. 

๊ทธ๋Ÿผ ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•œ์ค„๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค..!!

 

 

5๏ธโƒฃ @Valid, @InitBinder

์œ„์—์„œ๋Š” ์ง์ ‘ Validator ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•ด์„œ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ–ˆ๋‹ค. 

์ด๋Ÿฌํ•œ ๋ฐฉ์‹ ๋ง๊ณ  ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋งŒ๋“ค์–ด ๋ณธ๋‹ค. 

https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator

ํผ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. 

Controller

@InitBinder ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด ์ปจํŠธ๋กค๋Ÿฌ ํด๋ž˜์Šค์˜ handler ๋ฉ”์„œ๋“œ์—์„œ ํผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ธ๋”ฉํ•  ๋•Œ ๊ฒ€์ฆํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ง€์ •ํ•ด์ค€๋‹ค. 

@InitBinder๋กœ ๋“ฑ๋ก๋œ validator๋กœ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ์‹œ์ ์— ๊ฒ€์ฆํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ง์ ‘ Validator ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ๋˜ ์ฝ”๋“œ๋“ค์€ ์ง€์›Œ์ค€๋‹ค. 

 

์•„๋ฌด๊ฒƒ๋„ ์ž…๋ ฅํ•˜์ง€ ์•Š๊ณ  ๋“ฑ๋ก๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด 

์—๋Ÿฌ๊ฐ€ 4๊ฐœ ๋ฐœ์ƒํ•œ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

728x90