본문 바로가기

🌈 백엔드/스프링 MVC

스프링_ WebDataBinder & 데이터검증

반응형
SMALL

 

 

 

수정필요 / 데이터 검증 

 

에러가 발생하였을때 에러의 상세 정보를 콘솔에 조회한다 

 

 

day 값에 aa를 잘못 입력해보았다.

 

콘솔에 에러 정보가 조회된다 

 

 

[1] Validator 검증기


 

(1) Validator 개요 

객체를 검증하기 위한 인터페이스

객체 검증기 Validator 구현에 사용한다 

컨트롤러 클래스 내에 검증하는 메서드를 구현했으나 검증을 하는 클래스를 별도로 만들어서 적용한다 

 

 

(2) Validator 구성 

  • 인터페이스
  • 메서드 1 : 검증이 가능한 객체인지 true 검증 
  • 메서드 2 : 객체를 검증하는 메서드

 

UserValidator 인터페이스 생성 

supports 메서드 : 검증이 가능한 객체인지 참/거짓 확인 

validate 메서드 : 검증하려는 객체 clazz가 User 타입인지 , 자손인지 찾는다 

 

 

[2] Validator 검증방법


(1) 수동검증

직접 validator를 생성하고 , validate()를 직접 호출하는 방법 

 

(2)자동검증

UserValidator를 WebDataBinder의 로컬Validator로 등록한다

그 후 검증할 객체에 @Valid 애너테이션을 붙인다 

검증할 객체 앞에 애너테이션을 적용시키기 위해

maven bean validation api를 적용시킨다 

pom.xml 파일 내에 추가한다 

 

 

 

(3) 전체 검증

GlobalValidator를 사용한다.

하나의 validator로 여러 객체를 검증할때 사용한다 

 

필요한 구성 : 인터페이스 + servlet-context.xml 내 bean 등록 + Validatior 생성 

 

GlobalValidatior 인터페이스 전체 검증 클래스를 만든다 

 

servlet-context.xml 파일에서 

빈 등록 , validator 등록을 한다 

 

글로벌 validator와 로컬 validator를 동시에 사용하는 방법 

registerController에 Valitor를 추가하여 리스트를 만든다 

addValidators 사용 

 

 

추가가 아닌 한개의 valitor를 사용하려면 아래 처럼 사용한다 

setValidator 사용 

 

실행시 Valitor 리스트를 출력할수 있다 

 

 

 

[2] 검증 후 에러메세지 출력 


(1) MessageSource 

에러 메세지를 읽기 위한 인터페이스 

 

(2)MessageSource 구성

필요한 구성 : 인터페이스 + servlet-context.xml 내 bean 등록 + error_message.properties 생성 

 

(3) 에러메세지 검색 우선순위 

  1. requierd의 객체이름 검색
  2. requierd의 필드 이름 검색
  3. requierd의 타입 검색
  4. requierd 검색
  5. 디폴트메세지 검색 

 

(4) 브라우저 에러메세지 출력 

 

Preferences 로 들어가서 Content Types에서 파일 타입을 UTF-8 타입으로 업데이트한다 

 

 

에러메세지를 담을 새 파일 생성한다.  

src> main > vebapp> resources 안에 error_maessage.properties 파일 저장 

 

 

servlet-context.xml 파일에서 messageSource를 빈으로 등록하고 error_message 파일을 찾아 적용한다 

 

콘솔이 아닌 브라우저에 출력해야하기 대문에 

registerForm.jsp 파일에 <%@ 스프링이 제공하는 커스텀 태크 라이브러리를 사용한다 

 

 

<form> 대신 <form:form> 을 사용하도록 수정한다 

 

 

 

<form:errors>로 에러를 출력하고 path에 에러 발생 필드를 지정한다 

 

 

registerController 에서 

@RequestMaping (/ add)은 Get방식으로 받아와야하기 때문에 Post방식의 내용을 삭제하였고 

@PostMapping(/save)는 @PostMapping(/add)로 변경한다.

 

 

/register/add 에서 값을 넣지않고 회원가입을 눌렀을때 

"아이디의 길이는 {0}~{1} 사이어야 합니다" 라는 에러메세지가 뜰수 있다. 

 

 

 

{0}~{1} 을 글자수에 맞춰 수정한다. 

반응형
LIST

'🌈 백엔드 > 스프링 MVC' 카테고리의 다른 글

바인딩 = 파라미터 수집  (40) 2023.11.27
스프링_ WebDataBinder & 데이터변환  (0) 2023.08.29
스프링_DispatcherServlet  (0) 2023.08.29
스프링_예외처리  (2) 2023.08.28
스프링_세션과 서버 부담  (0) 2023.08.28