Class ValidationRSQLVisitor

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

public class ValidationRSQLVisitor 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 ValidationRSQLVisitor(User.class, new FieldMapping[0], Set.of()).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
    ValidationRSQLVisitor(Class<?> entityClass, FieldMapping[] fieldMappings, Set<? extends RsqlCustomOperator<?>> customOperators)
    Creates a new ValidationRSQLVisitor 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

    • ValidationRSQLVisitor

      public ValidationRSQLVisitor(Class<?> entityClass, FieldMapping[] fieldMappings, Set<? extends RsqlCustomOperator<?>> customOperators)
      Creates a new ValidationRSQLVisitor with the specified configuration.
      Parameters:
      entityClass - the entity class to validate against
      fieldMappings - array of field mappings (aliases) to consider
      customOperators - set of custom operators to allow in queries
  • 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