Bean Validation

 

Bean Validation은 JavaBean 유효성 검증을 위한 메타데이터 모델과 API에 대한 정의이며 여기서 언급하고 있는 JavaBean은 직렬화 가능하고 매개변수가 없는 생성자를 가지며, Getter 와 Setter Method를 사용하여 프로퍼티에 접근이 가능한 객체이다. 

Bean Validation 1.0 은 JSR-303이고 Bean Validation 2.0 은 JSR-380이다.

JSR-303과 JSR-380에는 어떠한 어노테이션을 이용하여 빈의 유효성을 정의할 수 있는지 알아보도록 하자.

 

https://beanvalidation.org/1.0/spec/ - JSR-303 명세서

https://beanvalidation.org/2.0-jsr380/spec/ - JSR-380 명세서

 

 

 

 

JSR-303

 

 

많이 사용되는 JSR-303 어노테이션들이다.

 

@Size(min=?, max=?)

min와 max의 값을 포함한 문자열의 최소길이와과 최대길이를 지정할 수 있다. 예를 들어, min이 2, max가 10이라면 data1에 들어갈 수 있는 문자열의 길이는 2~10글자수이다.

 

 

@Max(?), @Min(?)

정수의 최대값과 최소값을 지정할 수 있다. 지정한 값을 포함한다. 즉, 이상과 이하를 설정할 수 있다. @Max, @Min은 하나씩 사용할 수도 있지만 data5처럼 한번에 사용하여 범위를 지정할 수도 있다.

 

 

@AssertTrue, @AssertFalse

Assert : (강력히)주장하다. - 구글번역기..

참이라고 주장하는 아이와 거짓이라고 주장하는 아이?

@AssertTrue는 값이 false이면 유효성 검사를 만족하지 못하고, @AssertFalse는 값이 true이면 유효성 검사를 만족하지 못한다. 

 

 

@DecimalMax, @DecimalMin

@Max, @Min과 거의 비슷한데 속성에 inclusive를 써줌으로써 value의 값을 포함시키느냐 마느냐를 결정해줄 수 있다.

즉, inclusive가 ture이면 이상, 이하로서 사용이 가능하고 inclusive가 false이면 초과, 미만으로서 사용이 가능하다.

 

 

@Null, @NotNull

@Null은 값이 들어오면 오류가 발생(항상 널이어야하는 값에 사용)

@NotNull은 값이 들어오지 않으면 오류가 발생(반드시 입력을 받아야 하는 값에 사용)

 

 

@Digits(integer=?, fraction=?)

자릿수를 결정할 수 있다. integer속성은 자연수의 자릿수를 결정하고 fraction속성은 소숫점의 자릿수를 결정한다.

예를 들어,  @Digits(integer=3, fraction=3)인데 data10이 100.1111이면 오류가 발생하겠다. 근데 100이 들어갔다면 소숫점(fraction)은 0이라고 판단되어 오류가 발생하지는 않는다.

 

 

@Parttern(regexp=정규식)

regexp속성에 들어있는 정규식에 위배되면 오류가 발생한다. 예를들어 regexp="[a-zA-Z]*" 라고 선언되어 있으면 소문자 a~z 대문자 A~Z까지만 유효하다.

 

 

 

error_message.properties

 

각 어노테이션에서 발생할 수 있는 에러메세지를 properties파일에 담아서 이 파일을 메세지로 등록하였다.

 

 

Controller

 

Controller에서 @Valid를 써줌으로써 Hibernate Validator를 사용한다. DataBean1이라는 빈 클래스에 대한 유효성 검사를 실행하겠다는 선언이다. (@ModelAttribute는 생략되어있기 때문에 DataBean은 Request영역에 자동으로 담긴다.)

 

properties파일을 message로 등록한 후, jsp에서 위와 같이 form커스텀 태그를 활용하여 사용할 수 있겠다. 

유효성 검사를 통과하지 못하면 properties파일에 등록해주었던 에러메세지들이 출력될 것이다.

 

 

 

 

JSR-380

 

 

많이 사용되는 JSR-380 어노테이션들이다.

 

@NotEmpty

주입된 문자열의 길이가 0이면 오류가 발생한다. 공백도 글자로 인식한다. (스페이스바 3번누르면 길이가 3이라고 인식한다.)

 

 

@NotBlank

주입된 값이 공백을 제거하고 길이가 0이면 오류가 발생한다. (스페이스바 3번누르면 공백이라고 인식한다.)

 


@Positive

양수가 아니라면 오류가 발생한다. (0을 포함하지 않고 1이상의 값.)

 


@PositiveOrZero

0또는 양수가 아니라면 오류가 발생한다. 

 


@Negative

음수가 아니라면 오류발생 (0을 포함하지 않고 -1이하의 값.)

 


@NegativeOrZero

0또는 음수가 아니라면 오류가 발생한다. 

 


@Email

이메일 형식이 아니라면 오류가 발생한다. 중간에 @가 있는지 정도만 확인해준다.

'JAVA > Spring MVC' 카테고리의 다른 글

예외처리  (0) 2020.05.03
Interceptor  (0) 2020.05.03
에러메세지 커스터마이징  (2) 2020.04.30
Spring MVC 유효성검사  (0) 2020.04.30
Message  (0) 2020.04.29

+ Recent posts