【发布时间】:2016-06-08 02:34:50
【问题描述】:
我为验证我的 bean 字段做了自定义注释。我使用@Age(value = 10) 注释来验证年龄。我写了如下代码。
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 = AgeConstraintValidator.class)
@Target( { ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface Age {
String message() default "{Age is not valid }";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
int value();
}
这是年龄约束验证器的代码
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class AgeConstraintValidator implements ConstraintValidator< Age, Long> {
private Age age;
@Override
public void initialize(Age age) {
this.age = age;
}
@Override
public boolean isValid(Long dob, ConstraintValidatorContext context) {
System.out.print(" age in annotion");
if(dob != age.value()){
return true;
}
return false;
}
}
现在当我在我的 bean 中使用 @Age(value = 10) 时,它不被称为 Age 注释。谁能告诉我代码中的任何错误。当我创建我的 bean 对象并为测试分配年龄不同但我无法对 bean 的字段进行任何验证。
【问题讨论】:
-
你需要在你的配置中指出这个注解。你使用什么框架?春天?如果您有弹簧自动查找,请尝试使用 @Component 注释 Anntation。还显示您在何处以及如何使用此注释。也许你需要使用 CGLIB
-
@KrzysztofCichocki 我正在使用弹簧
-
显示你正在使用这个注解的类
-
类用户 { @Age( value =10) int age ; //getter 和 setter }
-
好的,所以您需要使用 cglib 来代理对字段的访问。你应该使用 AOP 框架。看看这篇文章的提示:stackoverflow.com/questions/1706751/…
标签: java spring hibernate rest validation