我想构建一个仅在NotNull
组上工作的Create
支票,因此我可以这样写
@Data
public static class TestDto {
@NotNullOnCreate
// @NotNull(groups = Create.class) // instead of this
private String id;
}
我像这样创建NotNullOnCreate
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
@Retention(RUNTIME)
@Documented
@Repeatable(NotNullOnCreate.List.class)
@ReportAsSingleViolation
@Constraint(validatedBy = {})
@NotNull(groups = Create.class)
@interface NotNullOnCreate {
String message() default "{javax.validation.constraints.NotNull.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
@Retention(RUNTIME)
@Documented
@interface List {
NotNullOnCreate[] value();
}
}
这不起作用,因为组合约束注释(参见ConstraintDescriptorImpl#createComposingConstraintDescriptor)组将被设置为托管注释的组('默认')。
我也尝试了这个Class<?>[] groups() default {Create.class};
,但这是不允许的,默认组必须为空。
我怎样才能做到这一点?我不想到处写小组。
修改