java - 在 Java 中使用注释验证字符串列表

标签 java spring validation annotations

在我的类中,我有一个带有短代码列表的属性:List[ShortCode]

我有一个针对有效短代码的自定义注释,如 ValidShortCode

此实现的代码:

@Target({ METHOD, FIELD, ANNOTATION_TYPE })

@Retention(RUNTIME)

@Constraint(validatedBy = ShortCodeValidator.class)

@Documented

public @interface ValidShortCode {

String message() default "{ValidShortCode.message}";

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};

}

public class ShortCodeValidator implements ConstraintValidator<ValidShortCode, String> {
private static final int MIN_LENGTH = 1;
private static final int MAX_LENGTH = 15;
private static final int EMPTY_LENGTH = 0;
@Override
public void initialize(ValidShortCode shortCode) {
    // TODO Auto-generated method stub
}

@Override
public boolean isValid(final String value,
        final ConstraintValidatorContext constraintContext) {
    boolean valid = false;
    if (null == value || value.trim().length() == EMPTY_LENGTH) {
        valid = true;
    }
    else if((value.trim().length() >= MIN_LENGTH)&&(value.trim().length() <= MAX_LENGTH)){
        valid = value.matches("([A-Za-z0-9])+");
    }
    return valid;
}
}

为了验证上面的List[ShortCode],我正在为此短代码列表编写另一个自定义注释。

我有一个想法,在此自定义注释中再次验证短代码,但这是代码重复。

在我用于验证短代码列表的自定义注释中,我有以下内容:

public class ListValidator  implements ConstraintValidator<ValidList, List<String>> {
private static final int EMPTY_SIZE = 0;

@Override
public void initialize(ValidList validList) {
    // TODO Auto-generated method stub
}

@Override
public boolean isValid(final List<String> value,
        final ConstraintValidatorContext constraintContext) {
    boolean valid = false;
    if (null == value || value.size() == EMPTY_SIZE) {
        valid = true;
    }
    else {
        for(String shortCode: value) {
            // Implementing the same code as done for the previous short code annotation
        }
    }
    return valid;
}
}

有人可以帮助我知道如何重用自定义注释 ValidShort 或任何其他有效的方法来解决这种情况吗?

谢谢。

最佳答案

您无需自定义 validator 即可完成此操作。
将短代码包装在类中,并在 getter 或成员本身上验证字符串:

class ShortCode {  
    private String value;

    ShortCode(String value) {
       this.value = value.trim();
    }

    @Pattern(regexp="PATTERN")
    @Size(min=1, max=15)
    String getValue() {
        return value;
    }
}

在列表前添加@Valid注解,这样列表中的所有元素都会根据上面定义的验证进行验证:

@Valid
List<ShortCode> shortCodesList;

关于java - 在 Java 中使用注释验证字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21003179/

相关文章:

java - hibernate 版本的差异

java - Picketlink 授权注释不起作用

java - Azure 服务总线队列 - JMS 消息监听器调用程序设置因目标异常而失败

java - 测试 Spring 批量作业步骤范围

java - javax.validation 的正确位置在哪里

.net - 了解DataAnnotations中的ValidationContext

java - Hibernate OneToMany 生成外键

Spring MVC XML 结果分块,缺少 Content-length header

java - Spring Swagger-ui 集成

validation - 有效的国际电话号码的最短长度是多少?