수정필요 / 데이터 검증
에러가 발생하였을때 에러의 상세 정보를 콘솔에 조회한다
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) 에러메세지 검색 우선순위
- requierd의 객체이름 검색
- requierd의 필드 이름 검색
- requierd의 타입 검색
- requierd 검색
- 디폴트메세지 검색
(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} 을 글자수에 맞춰 수정한다.
'🌈 백엔드 > 스프링 MVC' 카테고리의 다른 글
바인딩 = 파라미터 수집 (40) | 2023.11.27 |
---|---|
스프링_ WebDataBinder & 데이터변환 (0) | 2023.08.29 |
스프링_DispatcherServlet (0) | 2023.08.29 |
스프링_예외처리 (2) | 2023.08.28 |
스프링_세션과 서버 부담 (0) | 2023.08.28 |