In this example I have used default validations as well as custom validations
- @NotEmpty
- @Size
- @NotNull
- @DecimalMin
- @Digits
- etc..
@NotEmpty(message = "{account.name.notempty}")
@Size(min = 2,max = 50,message = "{account.name.size}")
privateStringaccountName;
@NotEmpty(message = "{account.type.notempty}")
@Size(min = 2,max = 50,message = "{account.type.size}")
privateStringaccountType;
@NotNull(message = "{account.amount.notnull}")
@DecimalMin(value = "100.00",inclusive = false,message = "{account.amount.min}")
@Digits(integer=3, fraction=2,message = "{account.amount.decimal}" )
privateBigDecimalamount;I have created custom validation like @AlreadyExists, it will check account name is already exists or not in database.
@AlreadyExists(message = "{alreadyexists.account}")
publicclassAccount{
...
}
@Documented@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.ANNOTATION_TYPE, ElementType.TYPE})
@Constraint(validatedBy = AlreadyExistsValidator.class)
public @interface AlreadyExists {
Stringmessage() default"Invalid value";
Class<?>[] groups() default {};
Class<? extendsPayload>[] payload() default {};
}
publicclassAlreadyExistsValidatorimplementsConstraintValidator<AlreadyExists, Account>{
@AutowiredprivateJdbcAccountRepositoryrepository;
@OverridepublicbooleanisValid(AccountinputValue, ConstraintValidatorContextcontext) {
log.debug("| Request Time - Start - isValid() " + LocalTime.now());
booleanflag = true;
if(inputValue.getId() == null) {
flag = isValidObjectForSave(inputValue, context);
}else {
flag = isValidObjectForUpdate(inputValue, context);
}
returnflag;
}
protectedbooleanisValidObjectForSave(AccountinputValue,ConstraintValidatorContextcontext) {
booleanstatusFlag = true; //Default SuccessList<Account> list = repository.findByName(inputValue.getAccountName());
if(list.size() > 0)
statusFlag = false; //FailurereturnstatusFlag;
}
protectedbooleanisValidObjectForUpdate(AccountinputValue,ConstraintValidatorContextcontext) {
booleanstatusFlag = true; //Default SuccessList<Account> list = repository.findByName(inputValue.getAccountName());
intcounter = 0;
for(Accountaccount:list) {
if (account.getId() != account.getId()) {
counter++;
}
}
if (counter > 0)
statusFlag = false;
returnstatusFlag;
} }account.name.notempty = Account Name is not empty
account.name.size = Account Name accepts at least {min} and at most {max} characters
account.type.notempty = Account Type is not empty
account.type.size = Account Type accepts at least {min} and at most {max} characters
account.amount.notnull = Amount is not empty
account.amount.min = Account Minimum balance should be 100.entered value ${validatedValue}
account.amount.decimal = Amount should be in 2 decimal values.entered value ${validatedValue}
alreadyexists.account = Account name already exists.entered value '${validatedValue.accountName}'account.id.min = Please provide the valid account id, entered value ${validatedValue}