xyz*_*xyz 7 validation spring annotations
我正在使用基于Spring 3注释的验证.我想为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 { };
}
Run Code Online (Sandbox Code Playgroud)
验证器类
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) {
}
}
Run Code Online (Sandbox Code Playgroud)
我也在我的网站上更新了它.
首先,它不是基于Spring注释的验证,而是JSR 303 Bean Validation,例如通过Hibernate验证实现.它真的不是春天相关/
您无法以OR方式组合注释*.
但是对于非null约束有一个简单的解决方法,因为最基本的验证接受null作为有效输入(因此,如果你想要"正常"行为,你经常需要将基本的vaidations和额外的@NotNull结合起来.不是你要求的).
例如:
@javax.validation.constraints.Size接受null作为有效输入.
所以你需要的是用@Size(min=1)而不是@NotEmpty.
BTW:不@NotEmpty只是的组合@NotNull和@Size(min = 1)
*除了你自己实现它.
| 归档时间: |
|
| 查看次数: |
3070 次 |
| 最近记录: |