我正在使用基于Spring 3注释的验证。我想为String字段添加以下验证
字段可以为空 OR 它应包含非空字符串
我知道注释,例如@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上更新了它。
答案 0 :(得分:5)
首先,它不是基于Spring注释的验证,它是JSR 303 Bean验证,例如通过Hibernate验证实现。这真的不是春天相关/
您无法以OR方式组合注释*。
但是对于非null约束有一个简单的解决方法,因为最基本的验证接受null作为有效输入(因此,如果你想要“正常”,你经常需要组合基本的vaidations和额外的@NotNull “行为,但不是你要求的。”
例如:
@javax.validation.constraints.Size
接受null作为有效输入。
因此,您需要使用@Size(min=1)
代替@NotEmpty
。
顺便说一句:不@NotEmpty
只是@NotNull
和@Size(min = 1)
*,除非您自己实施。