问题
I need to validate a field - secPhoneNumber (secondary phone #). I need to satisfy below conditions using JSR validation
- The field can be empty/null
- Otherwise, the data must be of length 10.
I tried the code below. The field is always getting validated on form submission. How do I validate the field to be of length 10 only when it is not empty?
Spring Form:
<form:label path="secPhoneNumber">
Secondary phone number <form:errors path="secPhoneNumber" cssClass="error" />
</form:label>
<form:input path="secPhoneNumber" />
Bean
@Size(max=10,min=10)
private String secPhoneNumber;
回答1:
I think for readability and to use in future times i would create my custom validation class, you only should follow this steps:
Add your new custom annotation to your field
@notEmptyMinSize(size=10) private String secPhoneNumber;
Create the custom validation classes
@Documented @Constraint(validatedBy = notEmptyMinSize.class) @Target( { ElementType.METHOD, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) public @interface notEmptyMinSize { int size() default 10; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }
Add your business logic to your validation
public class NotEmptyConstraintValidator implements ConstraintValidator<notEmptyMinSize, String> { private NotEmptyMinSize notEmptyMinSize; @Override public void initialize(notEmptyMinSize notEmptyMinSize) { this.notEmptyMinSize = notEmptyMinSize } @Override public boolean isValid(String notEmptyField, ConstraintValidatorContext cxt) { if(notEmptyField == null) { return true; } return notEmptyField.length() == notEmptyMinSize.size(); } }
And now you could use this validation in several fields with different sizes.
Here another example you can follow example
回答2:
Following patterns work
- @Pattern(regexp="^(\s*|[a-zA-Z0-9]{10})$")
- @Pattern(regexp="^(\s*|\d{10})$")
// ^ # Start of the line
// \s* # A whitespace character, Zero or more times
// \d{10} # A digit: [0-9], exactly 10 times
//[a-zA-Z0-9]{10} # a-z,A-Z,0-9, exactly 10 times
// $ # End of the line
Reference: Validate only if the field is not Null
来源:https://stackoverflow.com/questions/38224733/size-annotation-to-validate-a-field