Custom Validator

JSR 303 Bean Validationのリファレンス実装であるHibernate ValidatorにおけるCustom Validatorの作り方。

マニュアルを見るのが一番ですが、備忘に記載。
基本的には、Constraint ValidatorとConstraint Annotaionを作ればよい。

Constraint Annotation
package com.example.validator;
import java.lang.annotation.Documented;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import com.example.validator.constraints.TestValidator;
@Documented
@Constraint(validatedBy = TestValidator.class)
@Target({ METHOD, FIELD, TYPE })
@Retention(RUNTIME)
public @interface Test {
String message() default "{com.exapmle.validator.Test.message}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
Constraint Validator
package com.example.validator.constraints;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.ValidationException;
import com.example.validator.Test
public class TestValidator implements ConstraintValidator<Test, String> {
public void initialize(Test parameters) {
}
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
if ( value == null ) {
return true;
}
return value.equals("test");
}
}
http://docs.jboss.org/hibernate/validator/4.3/reference/en-US/pdf/hibernate_validator_reference.pdf