Which annotations would I have to use for Hibernate Validation to validate a String to apply to the following:
//should always have trimmed length = 6, only digits, only positive number @NotEmpty @Size(min = 6, max = 6) public String getNumber { return number.trim(); }
How can I apply digit validation? Would I just use @Digits(fraction = 0, integer = 6)
here?
The @Valid annotation ensures the validation of the whole object. Importantly, it performs the validation of the whole object graph. However, this creates issues for scenarios needing only partial validation. On the other hand, we can use @Validated for group validation, including the above partial validation.
Validating constraints In the setUp() method, a Validator instance is retrieved from the ValidatorFactory . Validator instances are thread-safe and may be reused multiple times.
The @Validated annotation is a class-level annotation that we can use to tell Spring to validate parameters that are passed into a method of the annotated class.
You could replace all your constraints with a single @Pattern(regexp="[\\d]{6}")
. This would imply a string of length six where each character is a digit.
You can also create your own hibernate validation annotation.
In the example below I created a validation annotation with name EnsureNumber
. Fields with this annotation will validate with the isValid
method of the EnsureNumberValidator
class.
@Constraint(validatedBy = EnsureNumberValidator.class) @Target({ ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) public @interface EnsureNumber { String message() default "{PasswordMatch}"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; boolean decimal() default false; } public class EnsureNumberValidator implements ConstraintValidator<EnsureNumber, Object> { private EnsureNumber ensureNumber; @Override public void initialize(EnsureNumber constraintAnnotation) { this.ensureNumber = constraintAnnotation; } @Override public boolean isValid(Object value, ConstraintValidatorContext context) { // Check the state of the Adminstrator. if (value == null) { return false; } // Initialize it. String regex = ensureNumber.decimal() ? "-?[0-9][0-9\\.\\,]*" : "-?[0-9]+"; String data = String.valueOf(value); return data.matches(regex); } }
You can use it like this,
@NotEmpty @Size(min = 6, max = 6) @EnsureNumber private String number1; @NotEmpty @Size(min = 6, max = 6) @EnsureNumber(message = "Field number2 is not valid.") private String number2; @NotEmpty @Size(min = 6, max = 6) @EnsureNumber(decimal = true, message = "Field number is not valid.") private String number3;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With