Class NarrowPageableHandlerMethodArgumentResolver
- java.lang.Object
-
- com.broadleafcommerce.data.tracking.core.web.NarrowPageableHandlerMethodArgumentResolver
-
- All Implemented Interfaces:
org.springframework.data.web.PageableArgumentResolver,org.springframework.web.method.support.HandlerMethodArgumentResolver
public class NarrowPageableHandlerMethodArgumentResolver extends Object implements org.springframework.data.web.PageableArgumentResolver
More flexible resolver forPageableimplementation based on additional 'offset' and 'forward' request params that relate toUnnumberedPageableandNarrowedPageable, respectively. By providing different output based on request params, well known patterns involving Pageable and PageableDefault params can continue to be leveraged in endpoint classes. Furthermore, narrowing behavior for a request can be changed on-the-fly (seeContextInfo.isIgnoreNarrowing()) and a NarrowedPageable will still work correctly to resolve a page of records through vanilla Spring repository support. This means that the more derived Pageable types are still backwards compatible with the less enhanced fetch flows.The default behavior is to provide the out-of-box Spring Data implementation of Pageable when the 'offset' request parameter is omitted from the request. Next, if 'offset' is included, but 'forward' is omitted, it will provide an implementation of UnnumberedPageable. Finally, should both 'offset' and 'forward' be supplied, it will provide an implementation of NarrowedPageable.
- Author:
- Jeff Fischer
-
-
Constructor Summary
Constructors Constructor Description NarrowPageableHandlerMethodArgumentResolver()NarrowPageableHandlerMethodArgumentResolver(org.springframework.data.web.SortArgumentResolver sortResolver)NarrowPageableHandlerMethodArgumentResolver(org.springframework.data.web.SortHandlerMethodArgumentResolver sortResolver)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description StringgetForwardParameterName()Retrieves the parameter name to be used to determine if this pageable request is incrementally moving forward through the result set, or in reverse.protected intgetMaxPageSize()Retrieves the maximum page size to be accepted.StringgetOffsetParameterName()Retrieves the parameter name to be used to determine the number of records to offset.protected StringgetPageParameterName()Retrieves the parameter name to be used to find the page number in the request.protected StringgetSizeParameterName()Retrieves the parameter name to be used to find the page size in the request.booleanisFallbackPageable(org.springframework.data.domain.Pageable pageable)Returns whether the givenPageableis the fallback one.protected booleanisOneIndexedParameters()Indicates whether to expose and assume 1-based page number indexes in the request parameters.org.springframework.data.domain.PageableresolveArgument(org.springframework.core.MethodParameter methodParameter, org.springframework.web.method.support.ModelAndViewContainer mavContainer, org.springframework.web.context.request.NativeWebRequest webRequest, org.springframework.web.bind.support.WebDataBinderFactory binderFactory)voidsetFallbackPageable(org.springframework.data.domain.Pageable fallbackPageable)Configures thePageableto be used as fallback in case noPageableDefaultorPageableDefault(the latter only supported in legacy mode) can be found at the method parameter to be resolved.voidsetForwardParameterName(String forwardParameterName)Sets the parameter name to be used to determine if this pageable request is incrementally moving forward through the result set, or in reverse.voidsetMaxPageSize(int maxPageSize)Configures the maximum page size to be accepted.voidsetOffsetParameterName(String offsetParameterName)Sets the parameter name to be used to determine the number of records to offset.voidsetOneIndexedParameters(boolean oneIndexedParameters)Configures whether to expose and assume 1-based page number indexes in the request parameters.voidsetPageParameterName(String pageParameterName)Configures the parameter name to be used to find the page number in the request.voidsetPrefix(String prefix)Configures a general prefix to be prepended to the page number and page size parameters.voidsetQualifierDelimiter(String qualifierDelimiter)The delimiter to be used between the qualifier and the actual page number and size properties.voidsetSizeParameterName(String sizeParameterName)Configures the parameter name to be used to find the page size in the request.booleansupportsParameter(org.springframework.core.MethodParameter parameter)
-
-
-
Constructor Detail
-
NarrowPageableHandlerMethodArgumentResolver
public NarrowPageableHandlerMethodArgumentResolver()
-
NarrowPageableHandlerMethodArgumentResolver
public NarrowPageableHandlerMethodArgumentResolver(org.springframework.data.web.SortHandlerMethodArgumentResolver sortResolver)
-
NarrowPageableHandlerMethodArgumentResolver
public NarrowPageableHandlerMethodArgumentResolver(org.springframework.data.web.SortArgumentResolver sortResolver)
-
-
Method Detail
-
supportsParameter
public boolean supportsParameter(org.springframework.core.MethodParameter parameter)
- Specified by:
supportsParameterin interfaceorg.springframework.web.method.support.HandlerMethodArgumentResolver
-
resolveArgument
public org.springframework.data.domain.Pageable resolveArgument(org.springframework.core.MethodParameter methodParameter, org.springframework.web.method.support.ModelAndViewContainer mavContainer, org.springframework.web.context.request.NativeWebRequest webRequest, org.springframework.web.bind.support.WebDataBinderFactory binderFactory)- Specified by:
resolveArgumentin interfaceorg.springframework.web.method.support.HandlerMethodArgumentResolver- Specified by:
resolveArgumentin interfaceorg.springframework.data.web.PageableArgumentResolver
-
setFallbackPageable
public void setFallbackPageable(org.springframework.data.domain.Pageable fallbackPageable)
Configures thePageableto be used as fallback in case noPageableDefaultorPageableDefault(the latter only supported in legacy mode) can be found at the method parameter to be resolved.If you set this to Optional#empty(), be aware that you controller methods will get null handed into them in case no
Pageabledata can be found in the request. Note, that doing so will require you supply bot the page and the size parameter with the requests as there will be no default for any of the parameters available.- Parameters:
fallbackPageable- thePageableto be used as general fallback.
-
isFallbackPageable
public boolean isFallbackPageable(org.springframework.data.domain.Pageable pageable)
Returns whether the givenPageableis the fallback one.- Parameters:
pageable- can be null.- Returns:
- Since:
- 1.9
-
setMaxPageSize
public void setMaxPageSize(int maxPageSize)
Configures the maximum page size to be accepted. This allows to put an upper boundary of the page size to prevent potential attacks trying to issue anOutOfMemoryError. Defaults toDEFAULT_MAX_PAGE_SIZE.- Parameters:
maxPageSize- the maxPageSize to set
-
getMaxPageSize
protected int getMaxPageSize()
Retrieves the maximum page size to be accepted. This allows to put an upper boundary of the page size to prevent potential attacks trying to issue anOutOfMemoryError. Defaults toDEFAULT_MAX_PAGE_SIZE.- Returns:
- the maximum page size allowed.
-
setPageParameterName
public void setPageParameterName(String pageParameterName)
Configures the parameter name to be used to find the page number in the request. Defaults topage.- Parameters:
pageParameterName- the parameter name to be used, must not be null or empty.
-
getPageParameterName
protected String getPageParameterName()
Retrieves the parameter name to be used to find the page number in the request. Defaults topage.- Returns:
- the parameter name to be used, never null or empty.
-
setSizeParameterName
public void setSizeParameterName(String sizeParameterName)
Configures the parameter name to be used to find the page size in the request. Defaults tosize.- Parameters:
sizeParameterName- the parameter name to be used, must not be null or empty.
-
getSizeParameterName
protected String getSizeParameterName()
Retrieves the parameter name to be used to find the page size in the request. Defaults tosize.- Returns:
- the parameter name to be used, never null or empty.
-
setPrefix
public void setPrefix(String prefix)
Configures a general prefix to be prepended to the page number and page size parameters. Useful to namespace the property names used in case they are clashing with ones used by your application. By default, no prefix is used.- Parameters:
prefix- the prefix to be used or null to reset to the default.
-
setQualifierDelimiter
public void setQualifierDelimiter(String qualifierDelimiter)
The delimiter to be used between the qualifier and the actual page number and size properties. Defaults to_. So a qualifier offoowill result in a page number parameter offoo_page.- Parameters:
qualifierDelimiter- the delimiter to be used or null to reset to the default.
-
setOneIndexedParameters
public void setOneIndexedParameters(boolean oneIndexedParameters)
Configures whether to expose and assume 1-based page number indexes in the request parameters. Defaults to false, meaning a page number of 0 in the request equals the first page. If this is set to true, a page number of 1 in the request will be considered the first page.- Parameters:
oneIndexedParameters- the oneIndexedParameters to set
-
isOneIndexedParameters
protected boolean isOneIndexedParameters()
Indicates whether to expose and assume 1-based page number indexes in the request parameters. Defaults to false, meaning a page number of 0 in the request equals the first page. If this is set to true, a page number of 1 in the request will be considered the first page.- Returns:
- whether to assume 1-based page number indexes in the request parameters.
-
getForwardParameterName
public String getForwardParameterName()
Retrieves the parameter name to be used to determine if this pageable request is incrementally moving forward through the result set, or in reverse. Defaults toforward. This parameter is only used when the request is targetingNarrowedPageable.- Returns:
- the parameter name to be used
-
setForwardParameterName
public void setForwardParameterName(String forwardParameterName)
Sets the parameter name to be used to determine if this pageable request is incrementally moving forward through the result set, or in reverse. Defaults toforward. This parameter is only used when the request is targetingNarrowedPageable.- Parameters:
forwardParameterName- the parameter name to be used
-
getOffsetParameterName
public String getOffsetParameterName()
Retrieves the parameter name to be used to determine the number of records to offset. Defaults tooffset. This parameter is only used when the request is targetingUnnumberedPageableandNarrowedPageable.- Returns:
- the parameter name to be used
-
setOffsetParameterName
public void setOffsetParameterName(String offsetParameterName)
Sets the parameter name to be used to determine the number of records to offset. Defaults tooffset. This parameter is only used when the request is targetingUnnumberedPageableandNarrowedPageable.- Parameters:
offsetParameterName- the parameter name to be used
-
-