我使用基於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