- Full POM.xml for Project
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>custom.validation</groupId>
<artifactId>user</artifactId>
<version>0.0.1-SNAPSHOT</version>
<description>This is hello world project for javax validation of beans</description>
<dependencies>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.13.Final</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
</project>
2. We will write Employee class with annotations for Bean validations. Bean Validation annotations are provided by javax.validation package.
Also each annotation in general can have value to validate against, validation failure message as input parameters.
Employee.Java
package user;
import javax.validation.constraints.AssertTrue;
import javax.validation.constraints.Email;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class Employee {
@NotNull(message="FirstName should not be null")
private String firstName;//to demonstrate NotNull validation annotation
@NotNull(message="LastName should not be null")
private String lastName;//to demonstrate NotNull validation annotation
@AssertTrue
private boolean isCerified;//to demonstrate Boolean True validation annotation
@Size(min=10, max=200, message="Address should not exceed 200 characters or should be more than 20 characters")
private String address;//to demonstrate size validation annotation
@Min(value=18, message="Age should be more than 18")
@Max(value=61, message="Age should be less than 61")
private int age;//to demonstrate Min/Max validation annotation
@Email(message = "Should have valid email id")
private String email;//to demonstrate Email validation annotation
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public boolean isCerified() {
return isCerified;
}
public void setCerified(boolean isCerified) {
this.isCerified = isCerified;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
3. To execute programmatic validations, javax.validation package provides Validator APIs to carry out validations. Some frameworks like hibernate, we do not need to explicitly trigger validation process, as it is internally taken care of by frameworks. To trigger it explicitly, we need to use as following.
App.java
package user;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
public class App {
public static void main(String args[]){
Employee suresh = new Employee();
suresh.setFirstName("Suresh");
suresh.setLastName("Ray");
suresh.setCerified(false);
suresh.setAddress("Mumbai");
suresh.setAge(20);
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation> violations = validator.validate(suresh);
for (ConstraintViolation violation : violations) {
System.out.println(violation.getMessage());
}
}
}
Output : Result below shows that validation failed for Address & isCertified property values.
