2010년 4월 2일 금요일

Spring 3.0 Validation Part1

Spring3.0 에서 Validation 기능을 보면 이전 버전
에서 사용했던 Validation 방법 뿐만 아니라
새로운 기능들이 추가가 되었습니다.
그중에서 단연 꽃은 JSR-303 스펙 입니다.
혹자는 이것을 Spring 3.0 Validation이라고 합니다.
JSR-303스펙은 쉽게 말해서 자바의 모든 클래스 자체에
검증 로직을 annotation으로 설정 해서 검증이
필요한 어느 곳이든 해당 검증을 수행 할 수 있도록
하는 J2EE Spec 입니다.
ㅋㅋ 저 답지 않게 유식한 척을 했군요
아래 코드를 보면서 간략 하게 설명 드리겠습니다.
public class PersonForm {

@NotNull
@Size(max=64)
private String name;

@Min(0)
private int age;

}

위에 코드를 보면 name 속성은 반드시 값이 존재 해야 하고,
length는 64자를 넘어서는 안된 다는 것입니다.
이렇게 클래스에 검증 로직을 넣고 검증이 필요한 곳
에서 실행을 하면 됩니다.


  • Library 설정
먼저 Spring 3.0 에서 JSR-303 스펙을 구현 하기 위해서는
아래의 라이브러리가 필요 합니다.
(1) jax-validation.jar (JSR-303 스펙 라이브러리)
(2) hibernate-validation.jar (JSR-303 구현체 라이브러리)
위 의 두개의 라이브러리를 다운 받아서 이클립스 classpath
를 설정 합니다.
만약 Maven을 사용 하시는 분들은 아래의 pom.xml을
추가 합니다.
<repositories>
<repository>
<id>jboss</id>
<url>http://repository.jboss.com/maven2</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.0.0.Beta2</version>
</dependency>
</dependencies>


스프링 3.0 full pom.xml 설정을 원하 시는 분들은
제 블러그 "Spring3.0 관련 라이브러리 (pom.xml)"
을 참조 하시면 됩니다.

  • 검증 클래스 작성

package org.springshowcase.mvc;

import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import org.hibernate.validation.constraints.NotEmpty;


public class User {

@NotEmpty()
@Size(min=1,max = 5)
@Pattern(regexp="[0-9a-zA-Z]")
private String id;

@NotEmpty()
private String name;

@NotEmail
private String email;

private Integer age;

...setter & getter method
}

위의 소스를 보면 전형적인 일반 자바 빈즈
클래스 형태 입니다.
"id" 속성의 검증 로직은 아래와 같습니다.
- 반드시 값이 존재 해야함
- 반드시 길이는 1이상 5이하여야 함 (byte 기준 아님)
- 반드시 영문 또는 숫자 형태여야함
"email" 속성에서 "@NotEmail"은 제가 직접
만든 annotation입니다. 이부분은 뒤에서
설명 하도록 하겠습니다.

  • Spring 빈 설정
스프링에서 JSR-303 스펙을 적용 하기 위해서는
다소 복잡한 과정을 거쳐야 합니다.
"LocalValidatorFactoryBean" 빈을 설정 하고 또 이 빈을
"AnnotationMethodHandlerAdapter" 선언된 빈에
injection 해야 하고...
이런거 필요 없이 spring3.0 에서 아주 간단한
네임스페이스를 제공 합니다.
<mvc:annotation-driven />

위와 같이 선언 하면 스프링에서 JSR-303 적용은
끝입니다.

Comming Up Next...

- Controller에서 Validation 사용 하는 방법
- JSR-303 기반 Message 번들 적용 방법
- JSP 설정 방법
- 커스컴 Validation Annotation 작성 방법
- Spring Validation VS JSR 303

너무 졸려서 다음에 포스팅 하도록 하겠습니다.

댓글 없음:

댓글 쓰기