@NotNull
@Size(min = 2, max = 30)
@Pattern(regexp = "[a-zA-Z ] *")
private String name;
As you see above definition, name is constrained with annotations like @NotNull, @Size and @Pattern. Instead of adding all these 3 constrains on the property 'name', we can create new constraint 'EmployeeNameConstraint' with all the required constraints and use it.
For example, I created 'EmployeeNameConstraint' like below.
EmployeeNameConstraint.java
@NotNull
@Size(min = 2, max = 30)
@Pattern(regexp = "[a-zA-Z ] *")
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {})
public @interface EmployeeNameConstraint {
String message() default "Employee name must be minimum 2 characters, maximum 30 characterrs and must not be null, contain spaces, a-z, A-Z only chars";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Employee.java
package com.sample.app.model;
import com.sample.app.constraints.EmployeeNameConstraint;
public class Employee {
private int id;
@EmployeeNameConstraint
private String name;
public Employee(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
App.java
package com.sample.app;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import com.sample.app.model.Employee;
public class App {
private static ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
private static Validator validator = validatorFactory.getValidator();
private static void validateBean(Employee emp) {
System.out.println("************************************");
Set<ConstraintViolation<Employee>> validationErrors = validator.validate(emp);
if (validationErrors.size() == 0) {
System.out.println("No validation errors....");
}
for (ConstraintViolation<Employee> violation : validationErrors) {
System.out.println(violation.getPropertyPath() + "," + violation.getMessage());
}
System.out.println("");
}
public static void main(String args[]) {
Employee emp1 = new Employee(1, "Ram");
System.out.println("Validation Errors for emp1");
validateBean(emp1);
Employee emp2 = new Employee(2, "Rama Krishna");
System.out.println("Validation Errors for emp2");
validateBean(emp2);
Employee emp3 = new Employee(3, "");
System.out.println("Validation Errors for emp3");
validateBean(emp3);
}
}
Run App.java, you will see below messages in console.
Validation Errors for emp1 ************************************ name,must match "[a-zA-Z ] *" Validation Errors for emp2 ************************************ name,must match "[a-zA-Z ] *" Validation Errors for emp3 ************************************ name,size must be between 2 and 30 name,must match "[a-zA-Z ] *"
No comments:
Post a Comment