Class DtoValidationRSQLVisitor

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

public class DtoValidationRSQLVisitor extends Object implements cz.jirutka.rsql.parser.ast.RSQLVisitor<Void,Void>
RSQL AST visitor that validates filters against a DTO contract and maps DTO property paths to entity property paths.

This visitor is used when WebQuery.dtoClass() is configured. It enforces that:

  • The requested selector exists on the DTO type.
  • The terminal DTO field is annotated with RsqlFilterable.
  • The requested operator is allowed for that DTO field.
  • The resulting mapped entity path can be resolved on the configured entity type.

During validation, selector mappings are captured and exposed via getFieldMappings() so downstream query construction can apply DTO-to-entity path translation.

  • Constructor Summary

    Constructors
    Constructor
    Description
    DtoValidationRSQLVisitor(Class<?> entityClass, Class<?> dtoClass, AnnotationUtil annotationUtil, boolean andNodeAllowed, boolean orNodeAllowed)
    Creates a DTO-aware validation visitor.
  • Method Summary

    Modifier and Type
    Method
    Description
    Returns immutable selector mappings generated while visiting nodes.
    visit(cz.jirutka.rsql.parser.ast.AndNode node, Void param)
    Visits a logical AND node and validates whether it is allowed.
    visit(cz.jirutka.rsql.parser.ast.ComparisonNode node, Void param)
    Visits a comparison node and validates selector/operator compatibility.
    visit(cz.jirutka.rsql.parser.ast.OrNode node, Void param)
    Visits a logical OR node and validates whether it is allowed.

    Methods inherited from class java.lang.Object

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

    • DtoValidationRSQLVisitor

      public DtoValidationRSQLVisitor(Class<?> entityClass, Class<?> dtoClass, AnnotationUtil annotationUtil, boolean andNodeAllowed, boolean orNodeAllowed)
      Creates a DTO-aware validation visitor.
      Parameters:
      entityClass - target entity type used for final path validation
      dtoClass - DTO type used to validate incoming selector paths
      annotationUtil - helper for resolving allowed operators from annotations
      andNodeAllowed - whether logical AND operator is allowed
      orNodeAllowed - whether logical OR operator is allowed
  • Method Details

    • getFieldMappings

      public Map<String,String> getFieldMappings()
      Returns immutable selector mappings generated while visiting nodes.
      Returns:
      map from request DTO path to resolved entity path
    • visit

      public Void visit(cz.jirutka.rsql.parser.ast.AndNode node, Void param)
      Visits a logical AND node and validates whether it is allowed.
      Specified by:
      visit in interface cz.jirutka.rsql.parser.ast.RSQLVisitor<Void,Void>
      Parameters:
      node - AND node
      param - unused visitor parameter
      Returns:
      null
      Throws:
      QueryValidationException - if AND operator is not allowed
    • visit

      public Void visit(cz.jirutka.rsql.parser.ast.OrNode node, Void param)
      Visits a logical OR node and validates whether it is allowed.
      Specified by:
      visit in interface cz.jirutka.rsql.parser.ast.RSQLVisitor<Void,Void>
      Parameters:
      node - OR node
      param - unused visitor parameter
      Returns:
      null
      Throws:
      QueryValidationException - if OR operator is not allowed
    • visit

      public Void visit(cz.jirutka.rsql.parser.ast.ComparisonNode node, Void param)
      Visits a comparison node and validates selector/operator compatibility.
      Specified by:
      visit in interface cz.jirutka.rsql.parser.ast.RSQLVisitor<Void,Void>
      Parameters:
      node - comparison node
      param - unused visitor parameter
      Returns:
      null