<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>2.0.2</version>
</dependency>
public class User {
@NotNull
private String name;
@Email
private String email;
// Getters and Setters
}
import jakarta.validation.Validation;
import jakarta.validation.Validator;
public class Main {
public static void main(String[] args) {
User user = new User();
user.setName("John");
user.setEmail("invalid-email");
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<User>> violations = validator.validate(user);
for (ConstraintViolation<User> violation : violations) {
System.out.println(violation.getMessage());
}
}
}
<validation-config
xmlns="https://jakarta.ee/xml/ns/validation/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/validation/config
https://jakarta.ee/xml/ns/validation/config_2_0.xsd">
<message-interpolator>com.example.MyMessageInterpolator</message-interpolator>
<constraint-validator-factory>com.example.MyConstraintValidatorFactory</constraint-validator-factory>
</validation-config>
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Constraint(validatedBy = PhoneNumberValidator.class)
public @interface PhoneNumber {
String message() default "Invalid phone number";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class PhoneNumberValidator implements ConstraintValidator<PhoneNumber, String> {
@Override
public void initialize(PhoneNumber constraintAnnotation) {
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
}
}