早上好,
我在Java(Spring Boot)中有以下自定义注释:
@Target({ PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = DomainKeyValidator.class)
public @interface DomainKeyValidation {
String message() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String domainKey() default "";
}
验证器类:
@Component
public class DomainKeyValidator implements ConstraintValidator<DomainKeyValidation, List<String>>
{
// Validation logic here ...
}
它适用于字符串数组,如下例所示:
@DomainKeyValidation(domainKey = "note_status") List<String> status
但是它不适用于像这个例子这样的单个字符串:
@DomainKeyValidation(domainKey = "note_status") String status
这两个用例的验证步骤是相同的,除了第一个用例,我必须循环遍历数组。
是否有方法通过根据输入类型更改其行为来使用相同的注释,或者是否建议创建两个单独的实现?预先感谢!
您可以创建一个适用于单个字符串元素的验证器:
@Component
public class DomainKeyValidator implements ConstraintValidator<DomainKeyValidation, String>
{
// Validation logic here ...
}
然后,按如下方式使用:
@DomainKeyValidation(domainKey = "note_status") String status
List<@DomainKeyValidation(domainKey = "note_status") String> statuses