Spring 3의 JSR 303 지원

Similar documents
Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

표준프레임워크로 구성된 컨텐츠를 솔루션에 적용하는 것에 문제가 없는지 확인

gnu-lee-oop-kor-lec06-3-chap7

교육자료

Intro to Servlet, EJB, JSP, WS

요약 1

PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

C# Programming Guide - Types

MVVM 패턴의 이해

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

Web Application을 구성하는 패턴과 Spring ROO의 사례

JUNIT 실습및발표

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - CSharp-10-예외처리

슬라이드 1

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

유니티 변수-함수.key

제11장 프로세스와 쓰레드

Microsoft PowerPoint - 2강

Spring Boot

Microsoft PowerPoint - C++ 5 .pptx

슬라이드 1

JVM 메모리구조

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

PowerPoint Template

thesis

신림프로그래머_클린코드.key

JAVA PROGRAMMING 실습 08.다형성

05-class.key

Spring Boot/JDBC JdbcTemplate/CRUD 예제

슬라이드 1

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

PowerPoint Presentation

1

170

006- 5¿ùc03ÖÁ¾T300çÃâ

Web Service Computing

chap 5: Trees

adfasdfasfdasfasfadf

ibmdw_rest_v1.0.ppt

파워포인트 템플릿

PowerPoint 프레젠테이션

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

PowerPoint Presentation

금오공대 컴퓨터공학전공 강의자료

<4D F736F F F696E74202D20C1A632C8B8C7D1B1B9BDBAC7C1B8B5BBE7BFEBC0DAB8F0C0D32D496E E D56432E BC8A3C8AF20B8F0B5E55D>

Network Programming

PowerPoint 프레젠테이션

Microsoft PowerPoint - Java7.pptx

JAVA PROGRAMMING 실습 05. 객체의 활용

No Slide Title

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

PowerPoint Presentation

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

쉽게 풀어쓴 C 프로그래밍

JAVA PROGRAMMING 실습 09. 예외처리

Interstage5 SOAP서비스 설정 가이드

Microsoft PowerPoint - lec12 [호환 모드]

문서의 제목 나눔고딕B, 54pt

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint Predicates and Quantifiers.ppt

01-OOPConcepts(2).PDF

쉽게 풀어쓴 C 프로그래밍

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

17장 클래스와 메소드

Microsoft PowerPoint - 2-Objective-C 기초

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사)

KYO_SCCD.PDF

I. Introduction... 1 II. Jdbc Support 구현배경 사용자요구사항 p6spy Architecture Architecture InjectionPa

Microsoft PowerPoint - VB.NET_06.pptx

Microsoft PowerPoint - additional01.ppt [호환 모드]

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

¾Æ½Ã¾ÆÀú³Î8È£-ÅëÇÕ

PowerPoint Presentation

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밊

Design Issues

목차 1 전자정부프레임워크연동고려사항 실행환경 개발환경 어플리케이션배포 개발환경구성 Liberty profile 설치 Liberty profile v8.5.5 다운로드

MasoJava4_Dongbin.PDF

Microsoft PowerPoint - Lect04.pptx

Microsoft PowerPoint - chap04-연산자.pptx

Spring Data JPA Many To Many 양방향 관계 예제

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

<property name="configlocation" value="classpath:/egovframework/sqlmap/example/sql-map-config.xml"/> <property name="datasource" ref="datasource2"/> *

PowerPoint Presentation

Microsoft PowerPoint - 04-UDP Programming.ppt

슬라이드 1

Class Loader 엑셈컨설팅본부 /APM 팀김다운 개요 클래스 loader 는자바의기능중하나로써런타임에클래스파일을찾고로딩하는임무를맡는다. WAS 마다 Class Loading 의방식에조금씩차이가있으며, Intermax 설치시에 classpath 옵션을 WAS 에추

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

OCW_C언어 기초

슬라이드 1

Secure Programming Lecture1 : Introduction

JAVA PROGRAMMING 실습 02. 표준 입출력

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

PowerPoint Template

PowerPoint Presentation

C++ Programming

Transcription:

Spring 3 의 JSR 303(Bean Validation) 지원 - 귀찮은확인, 쉽고편하게하자!- 2010. 9. 11 KSUG 안세원 kingori@gmail.com

목차 JSR 303 (Bean Validation) 소개 JSR 303 개요 JSR 303 주요구성요소 Spring 3 의 JSR 303 지원 Spring 3 의 JSR 303 활용 Spring MVC 의 JSR 303 활용 2

확인 (Validation) 시스템구성단위가목표한대로동작하기위한작업으로, 시스템의모든계층에꼭필요함! 하지만 상당히귀찮으며중복이많음 개발편의와일관성을위해다양한 Validation 도구들이개발됨 if( input.getname() == null input.getaddress() == null input.getemail() == null ) { throw new Exception( invalid input! ); } 3

JSR 303 Bean Validation 도메인객체를확인하기위한 Java 표준기술 애노테이션으로확인규칙을명시 < 도메인객체를이용한확인개념도 > [1] 4 [1] Hibernate Validator Reference Guide

살짝둘러보기 < 확인 Application - ValidateCar> 확인실패!! doors:must be greater than or equal to 2 name:may not be null < 도메인객체 Car> <Console 결과 > 5

JSR 303 의 4 대구성요소 구성요소 Constraint Annotation Constraint Validation 구현체 설명 확인기준을표현하는애노테이션 Constraint Annotation 과쌍을이루며, 확인로직을구현함 Validator 도메인객체인스턴스에대한확인을실행함 ConstraintViolation 확인기준의위반내용 6

Constraint Annotation 클래스에적용할수있음 예 ) 여러속성에대한확인규칙 사용자가직접정의할수있음 속성을가질수있음 필드에적용할수있음 메시지를별도로정의할수있음 Bean 속성 (Property) 에적용할수있음 (getter 메서드 ) 주의 ) 필드와속성에중복적용하지말것! 7

Constraint Annotation 정의 @Past 의코드 [1] Target: Annotation 적용대상정의 Retention: RUNTIME 으로고정 Constraint: validatedby 에 Constraint Validation 구현체정의 message(): 필수정의속성. 표준기본값은 annotation 의 fully qualified class name +.message groups(): 필수정의속성 payload(): 필수정의속성 8 [1] JSR 303 Spec

기본제공 Constraint Annotation Annotation 통과조건 Annotation 통과조건 @AssertFalse 거짓인가? @Max 지정값이하인가? @AssertTrue 참인가? @Min 지정값이상인가? @DecimalMax 지정값이하실수인가? @NotNull Null이아닌가? @DecimalMin 지정값이상실수인가? @Null Null인가? @Digits (integer=, fraction=) 대상수가지정된정수, 소수자리수이내인가? @Pattern (regex=, flag=) 정규식을만족하는가? @Future 미래날짜인가? @Size (min=, max=) 문자열, 배열등의크기가지정크기를만족하는가? @Past 과거날짜인가? @Valid 대상객체의확인조건을 만족하는가? 9

Constraint Validation 구현체 확인로직을구현하는클래스 Constraint Annotation 의 @Constraint( validatdateby ) 에명시함 Constraint Annotation 별, 확인대상 Class 별로정의해야함 예 ) @Past 에대한 Hibernate Validator 의구현체는 org.hibernate.validator.constraints.impl.pastvalidatorforcalendar 와 org.hibernate.validator.constraints.impl.pastvalidatorfordate 10

Constraint Validation 구현체정의 인터페이스 javax.validation.constraintvalidator 를구현함 Constraint Annotation, 확인형을명시 메서드 initialize(): 확인준비로직을수행함. 예 ) annotation 의정보를가져와 field 에저장 메서드 isvalid() : 대상객체에대한확인로직을수행하고, 결과를 boolean 형태로반환함. ConstraintViolation 을변경할땐인자로받은 ConstraintValidatorContext 를활용함 11

Validator 12

ConstraintViolation 확인위반결과를반환함 메서드명설명예 getmessage() 메시지내용을반환 may not be null getmessagetemplate() getrootbean() getleafbean() Constraint Annotation 에정의한메시지 key 를반환 확인대상 Root Bean 인스턴스를반환 확인대상 Leaf Bean 인스턴스를반환 { javax.validation.constraint s.notnull.message} getpropertypath() 대상속성에대한경로를반환 driver.name getinvalidvalue() 확인위반값인스턴스를반환 null <ConstraintViolation 주요메서드 > 13

확인규칙의상속과포함 1. 자식클래스는부모클래스의확인규칙을상속한다. 2. @Valid 를통해필드클래스의확인규칙을포함한다. 좌석수가 null 이아니어야함 (Car 로부터상속 ) 승객수가 null 이아니어야함 (Car 로부터상속 ) 운젂자가 null 이아니어야함 ( 직접정의 ) 운젂자. 이름이 null 이아니어야함 (@Valid 를통해 Person 의확인기준을적용 ) 14

확인그룹 (Validating Group) 상황에따라확인기준이달라질경우어떻게할까? 매번새로운도메인객체를정의? 상속? 확인그룹사용 interface/ class 모두가능 15 확인실패!! 승객수 :may not be null

Custom Constraint Constraint 를직접만들어쓸수있음 1. 기본제공되는 Constraint 를조합 별도의 Constraint Validation 구현체가필요없으며, Constraint Annotation 과메시지만정의하면됨 2. 새로운검증로직구현 Constraint Annotation, Constraint Validation 구현체, 메시지를정의함 16

Custom Constraint 조합 @NotNull, @Min, @Max 를조합한새로운 Constraint Annotation 을정의함 Constraint Validation 구현체는필요없으므로 validatedby 부분은 {} Constraint 에대한메시지정의와등록이필요함 17

Custom Constraint 로직구현 18

메시지처리 - 우선순위 Constraint Annotation 의 message 속성값 등록된 Custom MessageInterpolator 호출 기본 ResourceBundle 인 ValidationMessage 의메시지 구현체자체제공 ResourceBundle 의메시지 19

메시지처리 message 속성활용 20

메시지처리 MessageInterpolator <META-INF/validation.xml> ValidationMessages2 이라는이름의 ResourceBundle 에서메시지를가져오도록정의함 21

메시지처리 ResouceBundle ValidationMessage ResourceBunlde 생성 <ValidationMessages_ko.properties> <ValidateCar.java - 위반항목출력로직 > < 프로젝트구조 > 확인실패!! name: 값을입력해주세요 doors:2 보다크거나같아야합니다. 22 < 실행결과 >

실행환경구성 구현체선택 JSR 303 실행 Implementation Hibernate Validator: JSR 303 참조구현체 (http://www.hibernate.org/subprojects/validator.html) Apache Bean Validation (http://incubator.apache.org/bval/cwiki/index.html) 본자료는 Hibernate Validator 를기준으로함 23

실행환경구성 라이브러리설정 Hibernate Validator 를다운로드한다음, 다음의 jar 파일을프로젝트 classpath 에등록함 hibernate-validator- 버젂.jar log4j- 버젂.jar slf4j-*.jar validation-api- 버젂.jar 24

복습 - JSR 303 의 4 대구성요소 구성요소 Constraint Annotation Constraint Validation 구현체 설명 확인기준을표현하는애노테이션 Constraint Annotation 과쌍을이루며, 확인로직을구현함 Validator 도메인객체인스턴스에대한확인을실행함 ConstraintViolation 확인기준의위반내용 25

Spring 3 의 JSR 303 지원 Spring 3 의 JSR 303 지원 org.springframework.validation.beanvalidation Javax.validation.Validator 를 spring.validation.validator 로활용가능 Constraint Validation Implementation 에 @Autowire 등의 DI 가능 Spring 의 Locale 적용가능 @Controller 의 parameter 에 @Valid 활용 26

JSR 303 지원클래스의구조

Spring 기본설정 <applicationcontext.xml> Custom MessageInterpolator 사용예시 + JSR 303 구현체 : spring 자체가 JSR 303 구현체를제공하지않음 28

Validator vs. Validator javax.validation.validator 를 spring.validation.validator 로활용가능 org.springframework.validation.beanvalidation.springvalidatoradapter 의역할 Spring 의 Errors 형태로확인위반결과를활용 단, 확인그룹 (Validation Group) 활용은불가! 동일한 instance! 29

Constraint Validator 에 @Autowire 사용 Custom Constraint Validator 구현체에 @Value, @Autowire 를사용가능 org.springframework.validation.beanvalidation.springconstraintvalidator Factory Constraint Validator 가 Service, Property, 기타스프링 Bean 을손쉽게활용가능 30

Spring MVC 의 @Valid 지원 @Controller 의 Model 인자에대한자동확인수행가능 위반결과는 BindingResult 에저장 그러나, 확인그룹은적용할수없음 javax.validation.valid 31

Spring MVC 의 @Valid 지원 <dispatcher-servlet.xml> 32 validator 를설정할수있음 (org.springframework. validation.validator) 별도설정이필요치않다면 validator 관련모든설정을생략해도무방!

복습 - Spring 3 의 JSR 303 지원 Spring 3 의 JSR 303 지원 org.springframework.validation.beanvalidation Javax.validation.Validator 를 spring.validation.validator 로활용가능 Constraint Validation Implementation 에 @Autowire 등의 DI 가능 Spring 의 Locale 적용가능 @Controller 의 parameter 에 @Valid 활용 33

더공부할내용 XML으로확인기준정의하기 프로그램코드로확인기준정의하기 더복잡한 Custom Constraint 정의하기 GroupSequence 적용하기 Payload 활용하기 validation.xml 사용하기 34

참고자료 JSR303 Specification (http://jcp.org/en/jsr/detail?id=303) Hibernate Validator (http://www.hibernate.org/subprojects/validator.html) Spring Reference Chap 5. Validation, Data Binding, and Type Conversion (http://static.springsource.org/spring/docs/3.0.x/springframework-reference/html/validation.html) 35

Q & A 36