Class RestrictedPageableArgumentResolver
java.lang.Object
in.co.akshitbansal.springwebquery.RestrictedPageableArgumentResolver
- All Implemented Interfaces:
org.springframework.web.method.support.HandlerMethodArgumentResolver
public class RestrictedPageableArgumentResolver
extends Object
implements org.springframework.web.method.support.HandlerMethodArgumentResolver
A custom
HandlerMethodArgumentResolver that wraps a standard
PageableHandlerMethodArgumentResolver to enforce restrictions
on pageable sorting fields based on entity metadata.
This resolver only supports controller method parameters that:
- Are of type
Pageable. - Are annotated with
RestrictedPageable.
The resolver delegates the initial parsing of page, size,
and sort parameters to Spring's PageableHandlerMethodArgumentResolver.
It then validates each requested Sort.Order against the target entity class
specified in WebQuery on the controller method. Sorting is only allowed
on fields explicitly annotated with Sortable.
Alias mappings from WebQuery.fieldMappings() are also applied so API-facing
sort names can be rewritten to entity field paths.
If a requested sort field is not annotated as Sortable, a
QueryValidationException is thrown.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionorg.springframework.data.domain.PageableresolveArgument(@NonNull org.springframework.core.MethodParameter methodParameter, org.springframework.web.method.support.ModelAndViewContainer mavContainer, @NonNull org.springframework.web.context.request.NativeWebRequest webRequest, org.springframework.web.bind.support.WebDataBinderFactory binderFactory) Resolves the givenPageableargument from the web request.booleansupportsParameter(org.springframework.core.MethodParameter parameter) Determines whether the given method parameter is supported by this resolver.
-
Constructor Details
-
RestrictedPageableArgumentResolver
public RestrictedPageableArgumentResolver()
-
-
Method Details
-
supportsParameter
public boolean supportsParameter(org.springframework.core.MethodParameter parameter) Determines whether the given method parameter is supported by this resolver.Supported parameters must:
- Be assignable to
Pageable. - Be annotated with
RestrictedPageable.
- Specified by:
supportsParameterin interfaceorg.springframework.web.method.support.HandlerMethodArgumentResolver- Parameters:
parameter- the method parameter to check- Returns:
trueif the parameter is supported,falseotherwise
- Be assignable to
-
resolveArgument
public org.springframework.data.domain.Pageable resolveArgument(@NonNull @NonNull org.springframework.core.MethodParameter methodParameter, org.springframework.web.method.support.ModelAndViewContainer mavContainer, @NonNull @NonNull org.springframework.web.context.request.NativeWebRequest webRequest, org.springframework.web.bind.support.WebDataBinderFactory binderFactory) Resolves the givenPageableargument from the web request.The process is as follows:
- Delegate parsing of page, size, and sort parameters to
delegate. - Resolve
WebQuerymetadata from the controller method. - Validate each requested
Sort.Orderagainst the entity's sortable fields. If a field is not annotated withSortable, aQueryValidationExceptionis thrown. - Rewrite alias sort properties to real entity field paths using field mappings.
- Specified by:
resolveArgumentin interfaceorg.springframework.web.method.support.HandlerMethodArgumentResolver- Parameters:
methodParameter- the method parameter for which the value should be resolvedmavContainer- the ModelAndViewContainer (can benull)webRequest- the current requestbinderFactory- a factory for creating WebDataBinder instances (can benull)- Returns:
- a
Pageableobject containing page, size, validated sort information, and mapped sort field paths - Throws:
QueryValidationException- if any requested sort field is not marked asSortableQueryConfigurationException- if resolver metadata or alias configuration cannot be processed
- Delegate parsing of page, size, and sort parameters to
-