可以使用相同的自定义注释来验证T和List<T>吗?

问题描述 投票:0回答:1

早上好,

我在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

这两个用例的验证步骤是相同的,除了第一个用例,我必须循环遍历数组。

是否有方法通过根据输入类型更改其行为来使用相同的注释,或者是否建议创建两个单独的实现?预先感谢!

java spring spring-boot spring-annotations
1个回答
0
投票

您可以创建一个适用于单个字符串元素的验证器:

@Component
public class DomainKeyValidator implements ConstraintValidator<DomainKeyValidation, String>
{
    // Validation logic here ...
}

然后,按如下方式使用:

@DomainKeyValidation(domainKey = "note_status") String status
List<@DomainKeyValidation(domainKey = "note_status") String> statuses
© www.soinside.com 2019 - 2024. All rights reserved.