The constraint annotations can be placed in an interface or a superclass hierarchy. The constraint annotations are applied cumulatively. Constraints declared in a superclass getter are validated along with any constraints defined on an overridden version of the getter.
Example
package com.logicbig.example;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
public interface Employee {
String getName();
@Valid
@NotNull
PhoneNumber getPhoneNumber();
@NotNull
String getDept();
}
package com.logicbig.example;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
public class PhoneNumber {
@NotNull
private String type;
@Pattern(regexp = "\\d{3}-\\d{3}-\\d{4}")
private String number;
.............
}
package com.logicbig.example;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class Person {
@NotNull
@Size(min = 1, max = 300)
private String name;
.............
}
package com.logicbig.example;
public class EmployeeImpl extends Person implements Employee{
private PhoneNumber phoneNumber;
private String dept;
.............
}
The main class
package com.logicbig.example;
import javax.validation.*;
import java.util.Comparator;
import java.util.Set;
public class ExampleMain {
public static void main(String[] args) {
Validator validator = createValidator();
Employee employee = new EmployeeImpl("",
new PhoneNumber("cell", "234-3334"), null);
Set<ConstraintViolation<Employee>> violations = validator.validate(employee);
violations.stream().sorted(Comparator.comparing(o -> o.getPropertyPath().toString()))
.forEach(ExampleMain::printError);
}
private static void printError(ConstraintViolation<?> violation) {
System.out.println(violation.getPropertyPath()
+ " " + violation.getMessage());
}
private static Validator createValidator() {
Configuration<?> config = Validation.byDefaultProvider().configure();
ValidatorFactory factory = config.buildValidatorFactory();
Validator validator = factory.getValidator();
factory.close();
return validator;
}
}
Outputdept must not be null name size must be between 1 and 300 phoneNumber.number must match "\d{3}-\d{3}-\d{4}"
Example ProjectDependencies and Technologies Used: - hibernate-validator 6.2.0.Final (Hibernate's Jakarta Bean Validation reference implementation)
Version Compatibility: 5.0.0.Final - 6.2.0.Final Version compatibilities of hibernate-validator with this example: groupId: org.hibernate artifactId: hibernate-validator Reference implementation for Bean Validation 1.1
- 5.0.0.Final
- 5.0.1.Final
- 5.0.2.Final
- 5.0.3.Final
- 5.1.0.Final
- 5.1.1.Final
- 5.1.2.Final
- 5.1.3.Final
- 5.2.0.Final
- 5.2.1.Final
- 5.2.2.Final
- 5.2.3.Final
- 5.2.4.Final
- 5.2.5.Final
- 5.3.0.Final
- 5.3.1.Final
- 5.3.2.Final
- 5.3.3.Final
- 5.3.4.Final
- 5.3.5.Final
- 5.3.6.Final
- 5.4.0.Final
- 5.4.1.Final
- 5.4.2.Final
- 5.4.3.Final
groupId: org.hibernate.validator artifactId: hibernate-validator Reference implementation for Bean Validation 2.0
- 6.0.0.Final
- 6.0.1.Final
- 6.0.2.Final
- 6.0.3.Final
- 6.0.4.Final
- 6.0.5.Final
- 6.0.6.Final
- 6.0.7.Final
- 6.0.8.Final
- 6.0.9.Final
- 6.0.10.Final
- 6.0.11.Final
- 6.0.12.Final
- 6.0.13.Final
- 6.0.14.Final
- 6.0.15.Final
- 6.0.16.Final
- 6.0.17.Final
- 6.0.18.Final
- 6.0.19.Final
- 6.0.20.Final
- 6.0.21.Final
- 6.0.22.Final
- 6.1.0.Final
- 6.1.1.Final
- 6.1.2.Final
- 6.1.3.Final
- 6.1.4.Final
- 6.1.5.Final
- 6.1.6.Final
- 6.1.7.Final
- 6.2.0.Final
Version 7 and later: Jakarta Bean Validation 3.0 jakarta.* packages
Versions in green have been tested.
- javax.el-api 3.0.0 (Expression Language 3.0 API)
- javax.el 2.2.6 (Expression Language 2.2 Implementation)
- JDK 8
- Maven 3.8.1
|