为了开发一个高级插件 提供交叉字段验证/约束 我们使用SpELAssert来制作一个小捷径。
使整个事情适用于多重约束 在某些字段中,必须在列表中管理它们。
这种类型/样式的注释和FieldMatch与我们非常相似。
显然它将它呈现为“$ List”(内部接口?)而不是“.List”并且无法正常工作。
我迷路了......
package cz.jirutka.validator.spring;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
@Documented
@Retention(RUNTIME)
@Target({METHOD, FIELD, TYPE})
@Constraint(validatedBy = SpELAssertValidator.class)
public @interface SpELAssert {
String message() default "{cz.jirutka.validator.spring.SpELAssert.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String value();
String applyIf() default "";
Class<?>[] helpers() default { };
@Target({METHOD, FIELD, TYPE})
@Retention(RUNTIME)
@Documented
@interface List
{
SpELAssert[] value();
}
}
编辑1 以获得进一步说明
现在 - 使用:
创建注释(类型) // Create JavaType instance for the add-ons trigger annotation
JavaType rooSpELAssert = new JavaType("cz.jirutka.validator.spring.SpELAssert");
或者
// Create JavaType instance for the add-ons trigger annotation
JavaType rooSpELAssert = new JavaType(SpELAssert.class.getName());
结果:
@SpELAssert()
但是如何:
@SpELAssert.List()
失败的想法:
JavaType rooSpELAssert = new JavaType(SpELAssert.List.class.getName());
//==> @SpELAssert$List()