我正在使用基于 Spring 3 注释的验证。我想为字符串字段添加以下验证
Field can be Null OR it should contain a non empty string
我知道像 @Null
、@NotEmpty
这样的注释,但是如何将两者与 OR 条件一起使用?
解决方案:
使用@Size(min=1)
有帮助,但它不处理空格。因此添加了一个自定义注释 NotBlankOrNull
,它将允许 null
和非空字符串,并且它还会处理空格。非常感谢@Ralph。
这是我的注释
@Documented
@Constraint(validatedBy = { NotBlankOrNullValidator.class })
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
public @interface NotBlankOrNull {
String message() default "{org.hibernate.validator.constraints.NotBlankOrNull.message}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
验证器类
public class NotBlankOrNullValidator implements ConstraintValidator<NotBlankOrNull, String> {
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
if ( s == null ) {
return true;
}
return s.trim().length() > 0;
}
@Override
public void initialize(NotBlankOrNull constraint) {
}
}
我也在我的 site 上更新了它.
最佳答案
首先,它不是基于 Spring 注解的验证,它是 JSR 303 Bean Validation,例如由 Hibernate Validation 实现。这确实与 spring 无关/
您不能以 OR 方式组合注释*。
但是对于非空约束有一个简单的解决方法,因为最基本的验证接受 null 作为有效输入(因此,如果您想拥有“正常”,则通常需要结合基本验证和额外的 @NotNull “行为但不是您所要求的)。
例如:
@javax.validation.constraints.Size
接受 null 作为有效输入。
因此,您的情况需要使用 @Size(min=1)
而不是 @NotEmpty
。
顺便说一句:Not @NotEmpty
只是@NotNull
和@Size(min = 1)
的组合
*除非你自己实现它。
关于spring - Spring 基于注释的验证中的和/或条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9259329/