Custom Validation Annotion 생성

2015. 8. 26. 14:31JAVA/Spring(eGovFrame)

Spring에서 코드성을 체크하는 validation 없어서 생성하기로 맘먹고 구글링 시작....^ ^

 

package com.company.common.validation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

@Documented
@Constraint(validatedBy=EnumConstraintValidator.class)
@Target( {ElementType.METHOD, ElementType.FIELD } )
@Retention(RetentionPolicy.RUNTIME)
public @interface Enum {

 String message() default "{message.validation.constraints.enum}";

 Class<?>[] groups() default{};

 Class<? extends Payload>[] payload() default {};

 String[] values() default {};

}

위와 같이 생성을 하고 나중에 이를 사용하게 됩니다. (@Enum)

그리고 아래 소스는 Validation 체크 하는 로직을 담당하는 소스입니다.

package com.company.common.validation;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

import org.apache.commons.lang3.ArrayUtils;

public class EnumConstraintValidator implements ConstraintValidator<Enum, String> {

 private String[] values;

 @Override
 public void initialize(Enum constraint) {
   values = constraint.values();
 }

 @Override
 public boolean isValid(String value, ConstraintValidatorContext context) {

  if( null == value ) return false;

  if( ArrayUtils.indexOf(values, value) > -1 ) return true;

  return false;
 }

}

 

사용은 아래와 같이~~~~

public class PayHist {

 @NotEmpty(groups={InsertProc.class})
 @Length(max=1)
 @Enum(values={"C","F"})
 private String gubun;           //서비스종류 : C-유료서비스 고객, F-무료서비스 고객

...

values :  허용되는 값 목록

values와 해당 값을 비교하여 일치 하지 않을 경우 오류를 발생합니다.

 

또한 default message 설정은 이클립스 resources 최상위에다가....

ValidationMessages.properties 이름으로 생성하여 주면 properties를 사용하여 메시지 출력이 가능합니다..ㅡㅡ;;

message.validation.constraints.enum={values} 만 등록이 가능합니다.

다른데 넣으면 안되더라구요...