개발

[Spring] JSR-303 빈 검증 (유효성 검증)

동고킴 2016. 2. 28. 21:42
반응형

JSR-303 빈 검증 (유효성 검증)

 

 

서버 레벨에서 객체 유효성 검증을 쉽게 하는방법이다.

Spring 3.0? 3.1부터 지원하는것 같음.

 

실습삼아 한번 적용해봤다.

방법은 Apache bean validation과 Hibernate Valitator가 있는데, Hibernate를 사용해보기로 했다.

 

 

순서를 요약하면 아래 4가지만 하면된다.

1) (Maven 기준) pom.xml에 Dependency 추가

2) bean에 Annotation 추가

3) 컨트롤러에 @Valid 및 BindingResult 설정

4) jsp 수정

 

 

 

이제 본격적으로 적용해보자.

 

1. Maven 기준으로 hiberbate dependency 추가한다.

 
1
2
3
4
5
6
<!--  JSR-303 Bean Validation -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.2.2.Final</version>
</dependency>
 

 

 

2. bean에 유효성 검증 Annotation을 추가한다.

샘플로 NotNull과 Size만 적용해보기로 했다.

유효성 Annotation하고 message에 검증을 어겼을시 전달할 메시지를 작성한다.

(프로퍼티 값도 사용가능한데 이건 다음에 적용해보기로)

1
2
3
4
5
6
@NotNull(message="필수값입니다.")
private String memNm;
 
@NotNull(message="필수값입니다.")
@Size(min=5, max=30, message="5~30자 사이로 입력하세요.")
private String nickNm;

 

 

 

3. 컨틀롤러를 수정한다.

빈 객체앞에 @Valid 추가. BindingResult 설정. 둘다 필수다.

그후 유효성 검증 실패할 경우 로직을 추가한다.

1
2
3
4
5
6
7
8
9
10
@RequestMapping(value="/insertSample.do", method = RequestMethod.POST)
public String insertSample(@ModelAttribute @Valid SampleVo sampleVo, BindingResult bindingResult)
 throws Exception {
    
    if ( bindingResult.hasErrors() ) {
        return "/com/donggov/sample/insertSample";  // 유효성 검증 실패시 로직 및 튕겨낼곳 설정
    }
    
    return "redirect:/sample/selectListSample.do";
}
 

 

 

 

4. jsp를 수정한다.

우선 아래 form 태그 라이브러리를 추가한다. 

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>

 

form 태그를 사용하여 일반 소스를 아래와 같이 작성한다.

commandName은 컨트롤러에서 받을 객체명과 동일하게 설정한다.

path에는 bean에서 선언한 필드명과 동일하게 설정한다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
<form:form id="memForm" commandName="sampleVo">
<!-- <form:errors path="*" cssClass="error" />-->
    <div>
        이름 : <form:input path="memNm"/><form:errors path="memNm" cssClass="error" />
    </div>
    <div>
        닉네임 : <form:input path="nickNm" /><form:errors path="nickNm" cssClass="error" />
    </div>
    <div>
        <a href="/sample/selectListSample.do"><button type="button">목록</button></a>
        <button type="button" id="btnInsert" >등록</button>
    </div>
</form:form>
cs

 

 

설정 끝.

설정이 제대로 적용이 되는지 확인을 해보자.

 

잘된다. 테스트해보니 룰을 어길경우, 모든 에러 메세지를 다 출력한다.

이것도 우선순위를 둘수있는 방법이 있을것 같은데 그냥 패스

 

 

이름, 닉네임 둘다 입력안한 경우

 

 

이름엔 빈값, 닉네임엔 1자만 입력한 경우

 

 

이상 JSR0-303 빈 검증 끝

 

반응형