본문 바로가기

컴퓨터공학/Spring & Hibernate

Spring> MVC> Form validation

 Validating number range

객체 클래스에 새로운 필드인 freePasses를 입력하고

조건과 에러 메시지를 적는다.

 

customer-form.jsp 

Free passes 를 추가한다.

Submit할 때 저장할 freePasses필드 이름과

에러가 날 때 메시지를 가져올 freePasses

그리고 CSS를 적용해주자.

 

 

 

Controller 에서는 바꿀 것이 없으므로 패스

 

 

 


Regular Expression


Integer field required

freePasses가 int이면 @NotNull이 작동안한다 Integer라고 해야 한다.

 

int는 Primitive 자료형이다. float, int, double 등과 같은 데이터 자료형

이 자료형은 산술연산이 가능하다. 하지만 null값 처리는 불가능하다.

 

반면 Integer는 Wrapper Class 객체이다.

Unboxing을 하지 않으면 산술 연산이 불가능

null 값을 처리할 수 있다는 특징이 있다.

Boxing이란  Primitive 자료형 -> Wrapper 클래스

Unboxing 이란 Wrapper 클래스 -> Primitive 자료형

 

공백이나 값이 없으면 null값으로 처리하여 에러가 뜨는 게 작동원리인데

freePasses가 int 형이면 null값 처리가 불가능하므로 우리가 원하는대로 에러가 되지 않는다.

 


Custom message

폴더를 src 안에다가 만들어준다.

순서대로

Error type

Spring model attribue name

Field name

Custom message

이다.

 

 

BindingResult를 보면 값 중에서 typeMismatch.customer.freePasses가 있는 걸 볼 수 있다. 

즉, typeMismatch.customer.freePasses = Invalid number 는 오버라이딩하는 것이다.

 

 

 

bean을 property 위치를 적어서 새로 추가하자. 


Custom validation rule

만약 이 세상에 없는 듣도보도못한 새로운 유효검사를 만들고 싶다면??

예를 들어 입력값 앞에 'Seol' 이라는 글자가 반드시 들어가야 한다 라는

유효검사를 만들고 싶을 경우 어떻게 해야 할까?  

패키지를 새로 만들어준다.

 

 

어노테이션 파일을 만든다.

이 어노테이션 파일에는 

어노테이션 이름, 조건값, 메시지, 목표대상 등등이 첨부되어있다.

Payload : 보안레벨, 에러 코드 등 유효성 실패에 따른 세부사항 제공

CourseCodeConstraintValidator 에 빨간불이 들어왔으니 만들어주자.

 

CourseCodeConstraintValidator은 유효검사를 하는 클래스이다.

유효검사의 로직이 들어있다.

 

두 개는 같은 의미를 가진다.

우리는 단지 기본 설정으로 해놓은 것이다.

 


Custom validation rule : 배열

 

그렇다면 만약에 Course code의 조건값을 여러개 만들고 싶다면 어떻게하면 될까?

 

CourseCode.java 에서 배열로 바꾼다. 

유효성을 검사하는 ConstraintValidator가 처음 시작시 

CourseCode로 부터 검사값인 value를 coursePrefixs 으로 받도록 한다.

value가 배열이니 coursePrefixs도 배열이다.

 

유효성 검사하는 부분인 isValid에서는 

coursePrefixs 데이터값을 하나씩 꺼내서 비교 대조한다.

input 입력값인 theCode가 조건값인 coursePrefixs와 일치하면 for문을 탈출한다.

결과에 따라 result 반환

 

 


정리