Spring MVC κ°„λ‹¨ν•œ κ²Œμ‹œνŒ λ§Œλ“€κΈ° (+ 폼 데이터 μœ νš¨μ„± κ²€μ¦ν•˜κΈ° Validator)

2021. 12. 1. 10:57ㆍSpring

728x90

 

https://hyejin.tistory.com/270?category=1022293 

 

Spring MVC κ°„λ‹¨ν•œ κ²Œμ‹œνŒ λ§Œλ“€κΈ°

κ°„λ‹¨ν•œ μ‚¬μš©μž 관리 ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€μ–΄λ³΄κ³ , μ˜ˆμ „μ— jsp곡뢀할 λ•Œ λ§Œλ“€μ—ˆλ˜ jdbc κ²Œμ‹œνŒμ„ μ‘μš©ν•΄ Spring MVC λ²„μ „μœΌλ‘œ κ²Œμ‹œνŒμ„ λ§Œλ“€μ–΄λ³Ό μ˜ˆμ •μ΄λ‹€. μ΅œμ’… κ²°κ³Ό ν™”λ©΄μœΌλ‘œ κΈ€ μž‘μ„±, μˆ˜μ •, μ‚­μ œ, μ‘°νšŒκ°€

hyejin.tistory.com

Spring MVC κ²Œμ‹œνŒ κ΅¬ν˜„μ€ μ—¬κΈ°μ„œ μžμ„Ένžˆ λ³Ό 수 μžˆλ‹€. 

μ €λ²ˆμ— ν–ˆλ˜ κ²Œμ‹œνŒμ—μ„œλŠ” κΈ€ μž‘μ„± νΌμ—μ„œ 

μž‘μ„±μžλ‚˜ 제λͺ© 등을 μž…λ ₯ν•˜μ§€ μ•Šκ³ μ„œ '등둝' λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ ν…Œμ΄λΈ” 생성할 λ•Œ μž‘μ„±μžλ‚˜ 제λͺ©μ€ NOT NULL둜 μ„€μ •ν–ˆκΈ° λ•Œλ¬Έμ— 

μ—λŸ¬κ°€ λ°”λ‘œ λ°œμƒν•  것이닀.

κ·ΈλŸ¬λ―€λ‘œ μ΄λŸ¬ν•œ 상황을 λ°©μ§€ν•˜κΈ° μœ„ν•΄μ„œ λ§Œμ•½ μ‚¬μš©μžκ°€ μž‘μ„±μžλ‚˜ 제λͺ©μ„ μž‘μ„±ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄ μ•Œλ¦Ό λ©”μ‹œμ§€λ₯Ό λ„μšΈ 수 μžˆλ„λ‘ ν•΄μ•Όν•œλ‹€. 

https://hyejin.tistory.com/269?category=1022293 

 

Spring Validation 폼 데이터 검증 Validator, @Vaild

μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“œλŠ”λ° μžˆμ–΄ 폼 데이터 검증은 λ°˜λ“œμ‹œ ν•΄μ•Όν•˜λŠ” κ³Όμ • 쀑 ν•˜λ‚˜μ΄λ‹€. λ¨Όμ € ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ submit ν•˜κΈ°μ „μ— 검증을 ν•΄μ€˜μ•Όν•˜κ³ , (JavaScript) κ·Έ λ‹€μŒ μ„œλ²„μ—μ„œλ„ 검증을 ν•΄μ€˜μ•Όν•œ

hyejin.tistory.com

μ΄λ•Œ λ°°μ› λ˜ 폼 데이터 검증 Validatorλ₯Ό μ‚¬μš©ν•΄μ„œ 폼 데이터 κ²€μ¦ν•˜λŠ” 것을 μΆ”κ°€ν•  것이닀!

 

 

1️⃣ BoardValidator.java 

Validator μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” BoardValidator 클래슀λ₯Ό μƒμ„±ν•œλ‹€. 

❗ ValidatorλŠ” μŠ€ν”„λ§μ—μ„œ μ œκ³΅ν•˜λŠ” 폼 데이터 검증 객체이닀!

 

validate() μ—μ„œλŠ” 주어진 객체인 target에 μœ νš¨μ„± 검사λ₯Ό ν•˜κ³ , μœ νš¨μ„± κ²€μ‚¬ν–ˆμ„ λ•Œ 였λ₯˜κ°€ μžˆμ„ λ•ŒλŠ” 주어진 객체에 이 였λ₯˜λ“€μ„ errors에 등둝해쀀닀. 

 

그리고 rejectValue()에 폼 데이터 μ—λŸ¬ 정보λ₯Ό filed와 errorCode둜 등둝해쀀닀. 

 

 

2️⃣ BoardController.java

writeOk.do

WriteOk.doμ—μ„œλŠ” κΈ€ μž‘μ„± νŽ˜μ΄μ§€μ—μ„œ 제λͺ©κ³Ό μž‘μ„±μžλ₯Ό μž…λ ₯ν•˜μ§€ μ•ŠμœΌλ©΄ μ—λŸ¬κ°€ μžˆλ‹€κ³  νŒλ‹¨ν•΄ board/list.do둜 가지 μ•Šλ„λ‘ ν•œλ‹€. 

updateOk.do

μˆ˜μ • νŽ˜μ΄μ§€μ—μ„œλ„ μ—­μ‹œ 제λͺ©μ„ 빈칸으둜 두고 μˆ˜μ •ν•˜κΈ° λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ μ—λŸ¬κ°€ μžˆλ‹€κ³  νŒλ‹¨ν•΄ board/list.do둜 λ„˜μ–΄κ°€μ§€ μ•Šλ„λ‘ ν•œλ‹€.

 

글을 μž‘μ„±κ³Ό μˆ˜μ •μ—μ„œ 폼 데이터 μœ νš¨μ„±μ„ 검증해야 ν•˜κΈ° λ•Œλ¬Έμ— 그에 ν•΄λ‹Ήν•˜λŠ” ν•Έλ“€λŸ¬ λ©”μ„œλ“œμ— BindingResult λ§€κ°œλ³€μˆ˜λ₯Ό μΆ”κ°€ν•΄μ€€λ‹€.

 

❗ BindingResult 

: 마치 handler의 Model λ§€κ°œλ³€μˆ˜μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ DispatcherServletμ—μ„œ 제곡(μžλ™ μ£Όμž…) ν•΄μ£ΌλŠ” 객체둜 

validatorκ°€ μœ νš¨μ„± 검사λ₯Ό ν•œ κ²°κ³Όκ°€ λ‹΄κΈ°λŠ” 객체이닀. 

 

λ”°λΌμ„œ resultμ—λŠ” validatorκ°€ μœ νš¨μ„± 검사λ₯Ό ν•œ κ²°κ³Όκ°€ λ‹΄κΈ΄ 객체이닀. 

 

 

BoardController μ•ˆμ— μž‘μ„±

showErrors()λŠ” Errorsμ•ˆμ— λ‹΄κΈ΄ μ—λŸ¬λ“€μ„ 좜λ ₯ν•΄ ν™•μΈν•˜κΈ° μœ„ν•΄ μΆ”κ°€λ‘œ μž‘μ„±ν•΄μ€€ λ©”μ„œλ“œμ΄λ‹€. (λ°˜λ“œμ‹œ κ΅¬ν˜„ν•΄μ•Όν•˜λŠ” λ©”μ„œλ“œλŠ” μ•„λ‹˜)

 

BoardController

initBinder()λŠ” Validator μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 클래슀의 validate() λ©”μ„œλ“œλ₯Ό 직접 ν˜ΈμΆœν•΄μ„œ μ‚¬μš©ν•˜μ§€ μ•Šκ³  μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬μ—μ„œ ν˜ΈμΆœν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ€€ λ©”μ„œλ“œμ΄λ‹€. 

 

@InitBinder μ–΄λ…Έν…Œμ΄μ…˜μ„ 톡해 BoardController 클래슀의 handler μ—μ„œ 폼 데이터λ₯Ό 바인딩할 λ•Œ κ²€μ¦ν•˜λŠ” 객체λ₯Ό 지정해쀀닀. 

writeOk에 @Valid μΆ”κ°€

 

 

updateOk에 @Valid μΆ”κ°€

각각의 λ©”μ„œλ“œμ— @Validλ₯Ό μΆ”κ°€ν•΄μ£Όλ©΄ λ°”μΈλ”©ν•˜λŠ” μ‹œμ μ—μ„œ @InitBinder둜 λ“±λ‘λœ validator 객체인 BoardValidor둜 κ²€μ¦ν•œλ‹€! 

 

 

3️⃣ write.jsp , update.jsp

write.jsp
update.jsp

 

 

4️⃣ κ²°κ³Ό 

μž‘μ„±μž, 제λͺ© λͺ¨λ‘ μž…λ ₯ν•˜μ§€ μ•Šμ•˜μ„ λ•Œ 
μž‘μ„±μž, 제λͺ© λͺ¨λ‘ μž…λ ₯ν•˜μ§€ μ•Šμ•˜μ„ λ•Œ 

 

제λͺ©λ§Œ μž…λ ₯ν•˜μ§€ μ•Šμ•˜μ„ λ•Œ
κΈ€ μˆ˜μ •μ‹œ 제λͺ©μ„ μž…λ ₯ν•˜μ§€ μ•Šμ•˜μ„ λ•Œ 

 

728x90