Class EntityValidationRSQLVisitor

java.lang.Object
in.co.akshitbansal.springwebquery.EntityValidationRSQLVisitor
All Implemented Interfaces:
cz.jirutka.rsql.parser.ast.RSQLVisitor<Void,Void>

public class EntityValidationRSQLVisitor extends Object implements cz.jirutka.rsql.parser.ast.RSQLVisitor<Void,Void>
RSQL AST visitor that validates RSQL queries against a given entity class.

This visitor traverses the Abstract Syntax Tree (AST) produced by the RSQL parser and ensures that:

  • All fields referenced in the query exist on the entity class
  • Only fields annotated with RsqlFilterable are filterable
  • Only allowed RSQL operators (as defined in the RsqlFilterable annotation) are used

If any violation is detected, a QueryException is thrown describing the invalid field or operator.

Usage example:


 Node root = new RSQLParser().parse("status==ACTIVE;age>30");
 new EntityValidationRSQLVisitor(User.class, new FieldMapping[0], annotationUtil).visit(root);
 

This visitor is typically used in combination with RSQLJPASupport to ensure that only valid queries are converted into Spring Data JPA Specifications.

See Also:
  • Constructor Summary

    Constructors
    Constructor
    Description
    EntityValidationRSQLVisitor(Class<?> entityClass, FieldMapping[] fieldMappings, AnnotationUtil annotationUtil)
    Creates a new entity validation visitor with the specified configuration.
  • Method Summary

    Modifier and Type
    Method
    Description
    visit(cz.jirutka.rsql.parser.ast.AndNode andNode, Void unused)
    Visits an AndNode in the RSQL AST and recursively validates all child nodes.
    visit(cz.jirutka.rsql.parser.ast.ComparisonNode comparisonNode, Void unused)
    Visits a ComparisonNode in the RSQL AST and validates the field and operator against the entity class.
    visit(cz.jirutka.rsql.parser.ast.OrNode orNode, Void unused)
    Visits an OrNode in the RSQL AST and recursively validates all child nodes.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • EntityValidationRSQLVisitor

      public EntityValidationRSQLVisitor(Class<?> entityClass, FieldMapping[] fieldMappings, AnnotationUtil annotationUtil)
      Creates a new entity validation visitor with the specified configuration.
      Parameters:
      entityClass - the entity class to validate against
      fieldMappings - array of field mappings (aliases) to consider
      annotationUtil - helper for annotation resolution and operator checks
  • Method Details

    • visit

      public Void visit(cz.jirutka.rsql.parser.ast.AndNode andNode, Void unused)
      Visits an AndNode in the RSQL AST and recursively validates all child nodes.
      Specified by:
      visit in interface cz.jirutka.rsql.parser.ast.RSQLVisitor<Void,Void>
      Parameters:
      andNode - the AND node
      unused - unused parameter
      Returns:
      null
    • visit

      public Void visit(cz.jirutka.rsql.parser.ast.OrNode orNode, Void unused)
      Visits an OrNode in the RSQL AST and recursively validates all child nodes.
      Specified by:
      visit in interface cz.jirutka.rsql.parser.ast.RSQLVisitor<Void,Void>
      Parameters:
      orNode - the OR node
      unused - unused parameter
      Returns:
      null
    • visit

      public Void visit(cz.jirutka.rsql.parser.ast.ComparisonNode comparisonNode, Void unused)
      Visits a ComparisonNode in the RSQL AST and validates the field and operator against the entity class.
      Specified by:
      visit in interface cz.jirutka.rsql.parser.ast.RSQLVisitor<Void,Void>
      Parameters:
      comparisonNode - the comparison node
      unused - unused parameter
      Returns:
      null
      Throws:
      QueryValidationException - if the field does not exist, is not filterable, or the operator is not allowed
      QueryConfigurationException - if a custom operator or field mapping is misconfigured