当使用自定义椭圆注释和自定义类进行检查时,是否可以访问注释并检索使用的注释属性?
\n椭圆形参考:https ://sebthom.github.io/oval/USERGUIDE.html#custom-constraint-annotations
\n最小的例子
\n假设我们有 class Foo。\n它有两个带注释的字段。
\n每次,注释都有不同的myValue\xe2\x80\x93a和b.
class Foo {\n @CustomAnnotation(myValue = "a")\n public String first;\n\n @CustomAnnotation(myValue = "b")\n public String second;\n}\nRun Code Online (Sandbox Code Playgroud)\n这是注释。
\n请注意,应使用 执行检查MyCheck.class,并为 设置一些默认值myValue。
@Retention(RetentionPolicy.RUNTIME)\n@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})\n@Constraint(checkWith = MyCheck.class)\npublic @interface CustomAnnotation {\n String myValue() default "";\n}\nRun Code Online (Sandbox Code Playgroud)\n现在我们想使用 oval 来验证该字段。\n最重要的是,我们希望从注释中
提取值a或并在验证逻辑中使用它。bmyValue
class Foo {\n @CustomAnnotation(myValue = "a")\n public String first;\n\n @CustomAnnotation(myValue = "b")\n public String second;\n}\nRun Code Online (Sandbox Code Playgroud)\n我尝试过但失败的:
\nvalidatedObject是Foo.class。您可以轻松获取其字段和注释。但是,无法区分这两个注释。valueToValidate在这种情况下,String值 \xe2\x80\x93 包含什么first或second。context没有用,你可以从中获取编译时类型,即Stringvalidator没有用 ?经过对超类的一些挖掘后,我发现你可以重写方法
configure此方法获取当前正在现场检查的注释作为唯一参数。
然后您就可以阅读myValue.
public class MyCheck extends AbstractAnnotationCheck<CustomAnnotation> {
private String myValue;
@Override
public void configure(CustomAnnotation customAnnotation) {
super.configure(customAnnotation);
this.myValue = customAnnotation.myValue();
}
@Override
public boolean isSatisfied(Object validatedObject, Object valueToValidate, OValContext context,
Validator validator) throws OValException {
if (myValue.equals("a")) {}
else if (myValue.equals("b")){}
else {}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |