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 the RestrictedPageable annotation. Sorting is only allowed
on fields explicitly annotated with Sortable.
If a requested sort field is not annotated as Sortable, a
QueryException 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. - Retrieve the target entity class from the
RestrictedPageableannotation. - Validate each requested
Sort.Orderagainst the entity's sortable fields. If a field is not annotated withSortable, aQueryExceptionis thrown.
- 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, and validated sort information - Throws:
QueryException- if any requested sort field is not marked asSortable
- Delegate parsing of page, size, and sort parameters to
-