Skip to content

Commit a8ffa26

Browse files
mp911deodrotbohm
authored andcommitted
DATACMNS-1211 - Add ReactivePageableHandlerMethodArgumentResolver.
Add ReactivePageableHandlerMethodArgumentResolver and extract shared code from imperative PageableHandlerMethodArgumentResolver into PageableHandlerMethodArgumentResolverSupport.
1 parent f70bebd commit a8ffa26

File tree

4 files changed

+8
-182
lines changed

4 files changed

+8
-182
lines changed

src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolver.java

Lines changed: 0 additions & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -67,138 +67,6 @@ public PageableHandlerMethodArgumentResolver(@Nullable SortArgumentResolver sort
6767
this.sortResolver = sortResolver == null ? DEFAULT_SORT_RESOLVER : sortResolver;
6868
}
6969

70-
/**
71-
* Configures the {@link Pageable} to be used as fallback in case no {@link PageableDefault} or
72-
* {@link PageableDefault} (the latter only supported in legacy mode) can be found at the method parameter to be
73-
* resolved.
74-
* <p>
75-
* If you set this to {@literal Optional#empty()}, be aware that you controller methods will get {@literal null}
76-
* handed into them in case no {@link Pageable} data can be found in the request. Note, that doing so will require you
77-
* supply bot the page <em>and</em> the size parameter with the requests as there will be no default for any of the
78-
* parameters available.
79-
*
80-
* @param fallbackPageable the {@link Pageable} to be used as general fallback.
81-
*/
82-
public void setFallbackPageable(Pageable fallbackPageable) {
83-
84-
Assert.notNull(fallbackPageable, "Fallback Pageable must not be null!");
85-
86-
this.fallbackPageable = fallbackPageable;
87-
}
88-
89-
/**
90-
* Returns whether the given {@link Pageable} is the fallback one.
91-
*
92-
* @param pageable can be {@literal null}.
93-
* @since 1.9
94-
* @return
95-
*/
96-
public boolean isFallbackPageable(Pageable pageable) {
97-
return fallbackPageable == null ? false : fallbackPageable.equals(pageable);
98-
}
99-
100-
/**
101-
* Configures the maximum page size to be accepted. This allows to put an upper boundary of the page size to prevent
102-
* potential attacks trying to issue an {@link OutOfMemoryError}. Defaults to {@link #DEFAULT_MAX_PAGE_SIZE}.
103-
*
104-
* @param maxPageSize the maxPageSize to set
105-
*/
106-
public void setMaxPageSize(int maxPageSize) {
107-
this.maxPageSize = maxPageSize;
108-
}
109-
110-
/**
111-
* Retrieves the maximum page size to be accepted. This allows to put an upper boundary of the page size to prevent
112-
* potential attacks trying to issue an {@link OutOfMemoryError}. Defaults to {@link #DEFAULT_MAX_PAGE_SIZE}.
113-
*
114-
* @return the maximum page size allowed.
115-
*/
116-
protected int getMaxPageSize() {
117-
return this.maxPageSize;
118-
}
119-
120-
/**
121-
* Configures the parameter name to be used to find the page number in the request. Defaults to {@code page}.
122-
*
123-
* @param pageParameterName the parameter name to be used, must not be {@literal null} or empty.
124-
*/
125-
public void setPageParameterName(String pageParameterName) {
126-
127-
Assert.hasText(pageParameterName, "Page parameter name must not be null or empty!");
128-
this.pageParameterName = pageParameterName;
129-
}
130-
131-
/**
132-
* Retrieves the parameter name to be used to find the page number in the request. Defaults to {@code page}.
133-
*
134-
* @return the parameter name to be used, never {@literal null} or empty.
135-
*/
136-
protected String getPageParameterName() {
137-
return this.pageParameterName;
138-
}
139-
140-
/**
141-
* Configures the parameter name to be used to find the page size in the request. Defaults to {@code size}.
142-
*
143-
* @param sizeParameterName the parameter name to be used, must not be {@literal null} or empty.
144-
*/
145-
public void setSizeParameterName(String sizeParameterName) {
146-
147-
Assert.hasText(sizeParameterName, "Size parameter name must not be null or empty!");
148-
this.sizeParameterName = sizeParameterName;
149-
}
150-
151-
/**
152-
* Retrieves the parameter name to be used to find the page size in the request. Defaults to {@code size}.
153-
*
154-
* @return the parameter name to be used, never {@literal null} or empty.
155-
*/
156-
protected String getSizeParameterName() {
157-
return this.sizeParameterName;
158-
}
159-
160-
/**
161-
* Configures a general prefix to be prepended to the page number and page size parameters. Useful to namespace the
162-
* property names used in case they are clashing with ones used by your application. By default, no prefix is used.
163-
*
164-
* @param prefix the prefix to be used or {@literal null} to reset to the default.
165-
*/
166-
public void setPrefix(String prefix) {
167-
this.prefix = prefix == null ? DEFAULT_PREFIX : prefix;
168-
}
169-
170-
/**
171-
* The delimiter to be used between the qualifier and the actual page number and size properties. Defaults to
172-
* {@code _}. So a qualifier of {@code foo} will result in a page number parameter of {@code foo_page}.
173-
*
174-
* @param qualifierDelimiter the delimiter to be used or {@literal null} to reset to the default.
175-
*/
176-
public void setQualifierDelimiter(String qualifierDelimiter) {
177-
this.qualifierDelimiter = qualifierDelimiter == null ? DEFAULT_QUALIFIER_DELIMITER : qualifierDelimiter;
178-
}
179-
180-
/**
181-
* Configures whether to expose and assume 1-based page number indexes in the request parameters. Defaults to
182-
* {@literal false}, meaning a page number of 0 in the request equals the first page. If this is set to
183-
* {@literal true}, a page number of 1 in the request will be considered the first page.
184-
*
185-
* @param oneIndexedParameters the oneIndexedParameters to set
186-
*/
187-
public void setOneIndexedParameters(boolean oneIndexedParameters) {
188-
this.oneIndexedParameters = oneIndexedParameters;
189-
}
190-
191-
/**
192-
* Indicates whether to expose and assume 1-based page number indexes in the request parameters. Defaults to
193-
* {@literal false}, meaning a page number of 0 in the request equals the first page. If this is set to
194-
* {@literal true}, a page number of 1 in the request will be considered the first page.
195-
*
196-
* @return whether to assume 1-based page number indexes in the request parameters.
197-
*/
198-
protected boolean isOneIndexedParameters() {
199-
return this.oneIndexedParameters;
200-
}
201-
20270
/*
20371
* (non-Javadoc)
20472
* @see org.springframework.web.method.support.HandlerMethodArgumentResolver#supportsParameter(org.springframework.core.MethodParameter)
@@ -219,7 +87,6 @@ public Pageable resolveArgument(MethodParameter methodParameter, @Nullable Model
21987
String page = webRequest.getParameter(getParameterNameToUse(getPageParameterName(), methodParameter));
22088
String pageSize = webRequest.getParameter(getParameterNameToUse(getSizeParameterName(), methodParameter));
22189

222-
22390
Sort sort = sortResolver.resolveArgument(methodParameter, mavContainer, webRequest, binderFactory);
22491
Pageable pageable = getPageable(methodParameter, page, pageSize);
22592

src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverSupport.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
* {@link #DEFAULT_PAGE_PARAMETER}{@link #DEFAULT_QUALIFIER_DELIMITER}.
3737
*
3838
* @since 2.1
39+
* @see PageableHandlerMethodArgumentResolver
40+
* @see ReactivePageableHandlerMethodArgumentResolver
3941
* @author Mark Paluch
4042
*/
4143
public abstract class PageableHandlerMethodArgumentResolverSupport {

src/main/java/org/springframework/data/web/SortHandlerMethodArgumentResolver.java

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -39,53 +39,8 @@
3939
* @author Christoph Strobl
4040
*/
4141
public class SortHandlerMethodArgumentResolver extends SortHandlerMethodArgumentResolverSupport
42-
43-
private static final String DEFAULT_PARAMETER = "sort";
44-
private static final String DEFAULT_PROPERTY_DELIMITER = ",";
45-
private static final String DEFAULT_QUALIFIER_DELIMITER = "_";
46-
private static final Sort DEFAULT_SORT = Sort.unsorted();
47-
48-
private static final String SORT_DEFAULTS_NAME = SortDefaults.class.getSimpleName();
49-
private static final String SORT_DEFAULT_NAME = SortDefault.class.getSimpleName();
50-
51-
private Sort fallbackSort = DEFAULT_SORT;
52-
private String sortParameter = DEFAULT_PARAMETER;
53-
private String propertyDelimiter = DEFAULT_PROPERTY_DELIMITER;
54-
private String qualifierDelimiter = DEFAULT_QUALIFIER_DELIMITER;
55-
56-
/**
57-
* Configure the request parameter to lookup sort information from. Defaults to {@code sort}.
58-
*
59-
* @param sortParameter must not be {@literal null} or empty.
60-
*/
6142
implements SortArgumentResolver {
6243

63-
Assert.hasText(sortParameter, "SortParameter must not be null nor empty!");
64-
this.sortParameter = sortParameter;
65-
}
66-
67-
/**
68-
* Configures the delimiter used to separate property references and the direction to be sorted by. Defaults to
69-
* {@code}, which means sort values look like this: {@code firstname,lastname,asc}.
70-
*
71-
* @param propertyDelimiter must not be {@literal null} or empty.
72-
*/
73-
public void setPropertyDelimiter(String propertyDelimiter) {
74-
75-
Assert.hasText(propertyDelimiter, "Property delimiter must not be null or empty!");
76-
this.propertyDelimiter = propertyDelimiter;
77-
}
78-
79-
/**
80-
* Configures the delimiter used to separate the qualifier from the sort parameter. Defaults to {@code _}, so a
81-
* qualified sort property would look like {@code qualifier_sort}.
82-
*
83-
* @param qualifierDelimiter the qualifier delimiter to be used or {@literal null} to reset to the default.
84-
*/
85-
public void setQualifierDelimiter(String qualifierDelimiter) {
86-
this.qualifierDelimiter = qualifierDelimiter == null ? DEFAULT_QUALIFIER_DELIMITER : qualifierDelimiter;
87-
}
88-
8944
/*
9045
* (non-Javadoc)
9146
* @see org.springframework.web.method.support.HandlerMethodArgumentResolver#supportsParameter(org.springframework.core.MethodParameter)

src/test/java/org/springframework/data/web/ReactivePageableHandlerMethodArgumentResolverUnitTests.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -221,22 +221,24 @@ public void detectsFallbackPageableIfNullOneIsConfigured() {
221221
assertThat(resolver.isFallbackPageable(PageRequest.of(0, 10))).isFalse();
222222
}
223223

224-
private ReactivePageableHandlerMethodArgumentResolver getReactiveResolver() {
224+
private static ReactivePageableHandlerMethodArgumentResolver getReactiveResolver() {
225225

226226
ReactivePageableHandlerMethodArgumentResolver resolver = new ReactivePageableHandlerMethodArgumentResolver();
227227
resolver.setMaxPageSize(100);
228228
return resolver;
229229
}
230230

231-
private void assertSupportedAndResult(MethodParameter parameter, Pageable pageable) {
231+
private static void assertSupportedAndResult(MethodParameter parameter, Pageable pageable) {
232232
assertSupportedAndResult(parameter, pageable, TestUtils.getWebfluxRequest());
233233
}
234234

235-
private void assertSupportedAndResult(MethodParameter parameter, Pageable pageable, MockServerHttpRequest request) {
235+
private static void assertSupportedAndResult(MethodParameter parameter, Pageable pageable,
236+
MockServerHttpRequest request) {
236237
assertSupportedAndResult(parameter, pageable, request, getReactiveResolver());
237238
}
238239

239-
private void assertSupportedAndResult(MethodParameter parameter, Pageable pageable, MockServerHttpRequest request,
240+
private static void assertSupportedAndResult(MethodParameter parameter, Pageable pageable,
241+
MockServerHttpRequest request,
240242
SyncHandlerMethodArgumentResolver resolver) {
241243

242244
assertThat(resolver.supportsParameter(parameter)).isTrue();

0 commit comments

Comments
 (0)