javavalidationjakarta-validation

Relaxing default validations using jakarta validation groups


Is it possible to relax validation using jakarta validation groups?

For example, for default configuration I have the following validations:

class Person {
  
  @NotNull
  private String name;
  
  @NotNull
  private String email;
}

Call without specifying validation group works as expected:

validator.validate(person) //validates name AND email

But for this case:

validator.validate(person, EmailNullable.class) //validates name ONLY

... I want only name to be validated, email could be nullable.

Is it possible somehow define EmailNullable validation group to relax default validations and suppress NotNull for email field?


Solution

  • Can you define validation groups to selectively apply constraints to fields based on the validation context? By specifying the groups attribute in the @NotNull annotation, you can ensure constraints are applied only for the specified groups.

    Define Interfaces:

    public interface DefaultValidationGroup {}
    public interface EmailNullableValidationGroup {}
    

    Apply Validation Groups:

    public class Person {
      
      @NotNull(groups = {DefaultValidationGroup.class, EmailNullableValidationGroup.class})
      private String name;
      
      @NotNull(groups = DefaultValidationGroup.class)
      private String email;
    }
    

    Validate:

    validator.validate(person, DefaultValidationGroup.class);
    
    validator.validate(person, EmailNullableValidationGroup.class);
    

    Here are some useful references: