[英]Lists with Java Annotations
我想用Java注释来验证我的论点。 我不知道如何使用为列表编写自己的注释。
这里有个简单的例子:
class test{
@myAnnotation
List<myObject> myElements =new List<>(); // validated List
}
class myObject{
String name;
}
我的注释界面:
@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy=myAnnotation_Validator.class)
@Documented
public @interface myAnnotation {
String message() default "List is not valid";
Class <?>[] groups() default {};
Class <?extends Payload>[] payload() default{};
String[] namen();
}
public class myAnnotation_Validator implements ConstraintValidator<myAnnotation, Collection> {
@Override
public void initialize(Kredite_List_Check a) {
// What to do here???
}
@Override
public boolean isValid(Collection t, ConstraintValidatorContext cvc) {
// What to do here???
// How could i get the names from my List "myElements" ?
return false;
}
}
在此示例中,如果列表中的每个元素都有另一个名称,则列表有效。 我不知道如何在Validator类中获取listobject和myObject-elements的名称。
更新:
我尝试用另一种方式描述我的问题:
如果列表中两个“ myObject”类型的元素(“ myElements”)具有相同的名称,则我的列表无效!
我如何通过注释实现这一点?
public class myAnnotation_Validator implements ConstraintValidator<myAnnotation, Collection> {
private String[] names;
@Override
public void initialize(myAnnotation a) {
//get values which are defined in the annotation
names = myAnnotation.namen();
}
@Override
public boolean isValid(Collection objectToValidate, ConstraintValidatorContext cvc) {
if(objectToValidate == null) return true; // use the @NotNull annotation for null checks
for(Object o : objectToValidate) {
//check if value is valid
}
return false;
}
}
在initialize方法中,您可以获取在批注中定义的值。 isValid方法用于验证对象(objectToValidate->您的列表对象)。
有关如何编写自定义验证程序的更多信息,请参见http://docs.jboss.org/hibernate/validator/4.3/reference/en-US/html/validator-customconstraints.html#validator-customconstraints-validator
Hibernate-Validator实现也是一个很好的参考。 https://github.com/hibernate/hibernate-validator/tree/master/engine/src/main/java/org/hibernate/validator/internal/constraintvalidators
希望这个答案对您有所帮助。
我可以部分回答您的问题,您可以从集合中获取名称,该集合作为isValid
方法中的参数发送。 迭代您的集合(在您的情况下为列表)。
@Override
public boolean isValid(Collection t, ConstraintValidatorContext cvc) {
// Iterate your Collection t to get the names.
return false;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.