Framework/Grails

[Grails] Domain 클래스의 일부만 유효성 검사(Validation) 하기

louis.dev 2014. 5. 30. 17:36

Grails에서 Domain의 Validation(유효성 검사)는 3번에 걸처 수행됩니다.


1. request의 파라미터에서 Domain object 로 변환될 때

2. Domain.validation() 메소드를 실행시킬 때

3. Domain.save() 와 같이 디비에 저장하는 메소드를 실행시킬 때


위와 같은 단계를 진행해 오면서 Domain class의 모든 필드들에 대한 유효성 검사를 하고, 유효성 검사에 문제가 생기면 Domain의 errors 필드에 유효성 검사 에러메세지가 저장되게 됩니다.


그러나 때에 따라 일부 필드들만 유효성 검사를 진행해야 하는 경우가 있는데, 이경우는 아래와 같이 하면 됩니다.



class Person {
	String ssn;
	String name;
	String address;

	static constraints = {
		ssn nullable:false
		name nullable:false
		address nullable:true
	}
}

Person person = new Person()
person.validation(['ssn', 'name']) //ssn과 name만 유효성 검사를 진행하고 address에 대한 validation은 진행하지 않게 됩니다.

//만약 클래스의 모든 필드 중 일부 필드에 대한 유효성검사만 제외하고 싶으면
def allField = Person.declaredFields.collectMany {!it.synthetic ? [it.name] : []}		//Person 도메인의 모든 필드를 리스트로 가져온다.
person.validation(allField - ['name', 'address'])	// 모든필드에서 name, address를 제외한 나머지 필드 즉 ssn만 validation을 진행한다.

//일부만 유효성 검사를 거친 도메인 오브젝트를 저장하려면 validate:false 를 사용하면 된다.

Person pserson = new Person()
person.validation(person.validation(allField - ['name', 'address']))
person.save(validate: false)