Annotation Interface LimitNonNullGroup


@Repeatable(List.class) @Documented @Constraint(validatedBy=LimitNonNullGroupValidator.class) @Target(TYPE) @Retention(RUNTIME) public @interface LimitNonNullGroup
Validation annotation to ensure that exactly a specified number of fields are non-null.

This is useful in scenarios where only one (or a specific number of) mutually exclusive fields should be provided in a request or form, for example: providing exactly one contact method.

Usage Example:


 @LimitNonNullGroup(
     fields = { "field1", "field2" },
     limit = 1,
     message = "Only one of filed1 or field2 must be provided"
 )
 @LimitNonNullGroup(
     fields = { "field3", "field4" },
     limit = 2,
     message = "Both filed3 and filed3 must be provided"
 )
 public class MyObject {
     private String field1;
     private String field2;
     private String field3;
     private String field4;
 }
 

Validation Rule:

  • Passes if limit N of the specified fields are non-null
  • Fails if fewer or more than N are non-null

This annotation must be applied at the class level. It uses reflection to count how many of the specified fields are non-null during validation.

Author:
ChatGPT
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static @interface 
    Container annotation for repeatable use of LimitNonNullGroup.
  • Required Element Summary

    Required Elements
    Modifier and Type
    Required Element
    Description
     
  • Optional Element Summary

    Optional Elements
    Modifier and Type
    Optional Element
    Description
    Class<?>[]
     
    int
     
     
    Class<? extends jakarta.validation.Payload>[]
     
  • Element Details

    • message

      String message
      Default:
      "Exactly one of the specified fields must be non-null"
    • groups

      Class<?>[] groups
      Default:
      {}
    • payload

      Class<? extends jakarta.validation.Payload>[] payload
      Default:
      {}
    • fields

      String[] fields
    • limit

      int limit
      Default:
      1