在使用自定义椭圆批注和自定义类进行判断时,是否可以访问批注并检索使用的批注属性?
参考椭圆形:https://sebthom.github.io/oval/USERGUIDE.html#custom-constraint-annotations
Minimal example个
让我们假设我们有Foo
班.
它有两个带注释的字段.
每次,注释都有不同的myValue
-a
和b
.
class Foo {
@CustomAnnotation(myValue = "a")
public String first;
@CustomAnnotation(myValue = "b")
public String second;
}
这是批注.
需要注意的是,应该使用MyCheck.class
来执行判断,这也为myValue
设置了一些缺省值.
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})
@Constraint(checkWith = MyCheck.class)
public @interface CustomAnnotation {
String myValue() default "";
}
现在,我们要使用OVAL来验证此字段.
最重要的是,我们希望从注释myValue
中提取值a
或b
,并在验证逻辑中使用它.
public class MyCheck extends AbstractAnnotationCheck<CustomAnnotation> {
@Override
public boolean isSatisfied(Object validatedObject, Object valueToValidate, OValContext context,
Validator validator) throws OValException {
// how to get the value of `myValue`, which is `a` or `b` or empty string as default
}
}
我try 过,但失败了:
-
validatedObject
等于Foo.class
.您可以很容易地获得它的字段和注释.但是,无法区分这两个注释. - 在这种情况下,
valueToValidate
是String
的值-first
或second
所包含的值. -
context
没有用,你可以从中得到编译时类型,它是String
-
validator
没有用吗?