Class AbstractWebQuerySpecificationArgumentResolver

java.lang.Object
in.co.akshitbansal.springwebquery.resolver.spring.AbstractWebQueryResolver
in.co.akshitbansal.springwebquery.resolver.spring.AbstractWebQuerySpecificationArgumentResolver
All Implemented Interfaces:
org.springframework.web.method.support.HandlerMethodArgumentResolver
Direct Known Subclasses:
WebQueryDTOAwareSpecificationArgumentResolver, WebQueryEntityAwareSpecificationArgumentResolver

public abstract class AbstractWebQuerySpecificationArgumentResolver extends AbstractWebQueryResolver
Base HandlerMethodArgumentResolver for resolving RSQL-based Specification parameters.

This class initializes a parser constrained to the configured default and custom operators, adapts custom operators into RSQLCustomPredicate instances accepted by the underlying rsql-jpa integration, and merges WebQuery annotation settings with global defaults before delegating DTO-aware or entity-aware specification creation to subclasses.

  • Field Details

    • rsqlParser

      protected final cz.jirutka.rsql.parser.RSQLParser rsqlParser
      Parser configured with the allowed default and custom comparison operators.
    • customPredicates

      protected final List<io.github.perplexhub.rsql.RSQLCustomPredicate<?>> customPredicates
      Custom predicates adapted for rsql-jpa specification conversion.
    • customOperators

      protected final Map<Class<?>,RSQLCustomOperator<?>> customOperators
      Registered custom operators keyed by implementation class for downstream validation visitors.
  • Constructor Details

    • AbstractWebQuerySpecificationArgumentResolver

      protected AbstractWebQuerySpecificationArgumentResolver(String globalFilterParamName, boolean globalAllowAndOperator, boolean globalAllowOrOperator, int globalMaxASTDepth, Set<RSQLDefaultOperator> defaultOperators, Set<? extends RSQLCustomOperator<?>> customOperators)
      Creates the resolver base with global validation defaults, parser configuration, and custom predicate adaptation.
      Parameters:
      globalFilterParamName - global default request parameter name used when WebQuery.filterParamName() is blank
      globalAllowAndOperator - fallback AND-node policy used when @WebQuery defers to global settings
      globalAllowOrOperator - fallback OR-node policy used when @WebQuery defers to global settings
      globalMaxASTDepth - fallback maximum AST depth used when @WebQuery defers to global settings
      defaultOperators - built-in operators accepted by the parser
      customOperators - custom operators to register for parsing and predicate generation
  • Method Details

    • supportsParameter

      public boolean supportsParameter(@NonNull @NonNull org.springframework.core.MethodParameter parameter)
      Description copied from class: AbstractWebQueryResolver
      Determines whether the supplied method parameter belongs to a controller method annotated with WebQuery.

      This base implementation uses AbstractWebQueryResolver.getWebQueryAnnotation(MethodParameter) as the single source of truth for annotation lookup. Missing methods or missing annotations are treated as "not supported" rather than exceptional conditions so Spring MVC can continue evaluating other resolvers.

      Specified by:
      supportsParameter in interface org.springframework.web.method.support.HandlerMethodArgumentResolver
      Overrides:
      supportsParameter in class AbstractWebQueryResolver
      Parameters:
      parameter - method parameter under inspection
      Returns:
      true when the declaring method has WebQuery, otherwise false
    • resolveArgument

      public org.springframework.data.jpa.domain.Specification<?> resolveArgument(@NonNull @NonNull org.springframework.core.MethodParameter parameter, org.springframework.web.method.support.ModelAndViewContainer mavContainer, @NonNull @NonNull org.springframework.web.context.request.NativeWebRequest webRequest, org.springframework.web.bind.support.WebDataBinderFactory binderFactory)
    • resolveSpecification

      protected abstract org.springframework.data.jpa.domain.Specification<?> resolveSpecification(@NonNull @NonNull AbstractWebQuerySpecificationArgumentResolver.QueryConfiguration queryConfig, @NonNull @NonNull String filter)
      Resolves a validated specification for the supplied raw filter value and effective query configuration.
      Parameters:
      queryConfig - effective query configuration derived from WebQuery
      filter - raw RSQL filter expression from the request
      Returns:
      resolved specification
    • getQueryConfiguration

      protected AbstractWebQuerySpecificationArgumentResolver.QueryConfiguration getQueryConfiguration(@NonNull @NonNull org.springframework.core.MethodParameter parameter)
      Resolves the effective query configuration by combining method-level WebQuery settings with the configured global fallbacks.

      A blank WebQuery.filterParamName() delegates to the resolver's configured global default filter parameter name. Non-blank annotation overrides are validated before they are used for request lookup.

      Parameters:
      parameter - supported method parameter whose declaring method carries WebQuery
      Returns:
      effective configuration used by specification resolvers for validation and parsing