我使用基于Spring 3注解的验证。我想添加一个下面的验证字符串字段和/或基于Spring注解的验证条件
字段可以空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 { };
}
Validator类
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。
非常感谢四个建议并纠正了我。我试过'@Size(min = 1)',它适用于'null'和非空字符串。只是想知道如何处理,如果用户进入空间? – xyz 2012-02-13 11:21:28
@Ajinkya:看看NotBlank Annotation源代码。它再次被NotNull注解。但它通过NotBlankValidator验证(fortunaly NotBlankValidator返回true(有效)为null)。所以你需要自己的Annotation,但可以重用Validator实现> @Constraint(validatedBy = {NotBlankValidator.class})@Target ... @Retention ... public @interface NotBlankOrNull' – Ralph 2012-02-13 15:10:19
非常感谢:) – xyz 2012-02-13 18:47:46