Skip to content

Commit e758dd3

Browse files
vpavicmp911de
authored andcommitted
DATACMNS-1827 - Pageable and Sort arguments with empty qualifier value shouldn't be prefixed with delimiter.
Original pull request: #473.
1 parent 1d146da commit e758dd3

File tree

4 files changed

+31
-3
lines changed

4 files changed

+31
-3
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ protected String getParameterNameToUse(String source, @Nullable MethodParameter
230230

231231
Qualifier qualifier = parameter == null ? null : parameter.getParameterAnnotation(Qualifier.class);
232232

233-
if (qualifier != null) {
233+
if (qualifier != null && StringUtils.hasLength(qualifier.value())) {
234234
builder.append(qualifier.value());
235235
builder.append(qualifierDelimiter);
236236
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,8 +186,9 @@ protected String getSortParameter(@Nullable MethodParameter parameter) {
186186

187187
Qualifier qualifier = parameter != null ? parameter.getParameterAnnotation(Qualifier.class) : null;
188188

189-
if (qualifier != null) {
190-
builder.append(qualifier.value()).append(qualifierDelimiter);
189+
if (qualifier != null && StringUtils.hasLength(qualifier.value())) {
190+
builder.append(qualifier.value());
191+
builder.append(qualifierDelimiter);
191192
}
192193

193194
return builder.append(sortParameter).toString();

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
*
3636
* @author Oliver Gierke
3737
* @author Nick Williams
38+
* @author Vedran Pavic
3839
*/
3940
class PageableHandlerMethodArgumentResolverUnitTests extends PageableDefaultUnitTests {
4041

@@ -244,6 +245,18 @@ void detectsFallbackPageableIfNullOneIsConfigured() {
244245
assertThat(resolver.isFallbackPageable(PageRequest.of(0, 10))).isFalse();
245246
}
246247

248+
@Test // DATACMNS-1827
249+
void emptyQualifierIsUsedInParameterLookup() throws Exception {
250+
251+
MethodParameter parameter = new MethodParameter(Sample.class.getMethod("emptyQualifier", Pageable.class), 0);
252+
253+
MockHttpServletRequest request = new MockHttpServletRequest();
254+
request.addParameter("page", "2");
255+
request.addParameter("size", "10");
256+
257+
assertSupportedAndResult(parameter, PageRequest.of(2, 10), request);
258+
}
259+
247260
@Override
248261
protected PageableHandlerMethodArgumentResolver getResolver() {
249262
PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();
@@ -283,5 +296,7 @@ void simpleDefaultWithContaineredExternalSort(@PageableDefault(size = PAGE_SIZE,
283296
void validQualifier(@Qualifier("foo") Pageable pageable);
284297

285298
void noQualifiers(Pageable first, Pageable second);
299+
300+
void emptyQualifier(@Qualifier Pageable pageable);
286301
}
287302
}

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
* @author Thomas Darimont
4646
* @author Nick Williams
4747
* @author Mark Paluch
48+
* @author Vedran Pavic
4849
*/
4950
class SortHandlerMethodArgumentResolverUnitTests extends SortDefaultUnitTests {
5051

@@ -241,6 +242,15 @@ void resolvesDotOnlyInputToDefault() {
241242
});
242243
}
243244

245+
@Test // DATACMNS-1827
246+
void emptyQualifierIsUsedInParameterLookup() {
247+
248+
MethodParameter parameter = getParameterOfMethod("emptyQualifier");
249+
Sort reference = Sort.by("bar", "foo");
250+
251+
assertSupportedAndResolvedTo(getRequestWithSort(reference, ""), parameter, reference);
252+
}
253+
244254
private static Sort resolveSort(HttpServletRequest request, MethodParameter parameter) throws Exception {
245255

246256
SortHandlerMethodArgumentResolver resolver = new SortHandlerMethodArgumentResolver();
@@ -306,5 +316,7 @@ void simpleDefaultWithDirectionCaseInsensitive(
306316
void containeredDefault(@SortDefaults(@SortDefault({ "foo", "bar" })) Sort sort);
307317

308318
void invalid(@SortDefaults(@SortDefault({ "foo", "bar" })) @SortDefault({ "bar", "foo" }) Sort sort);
319+
320+
void emptyQualifier(@Qualifier Sort sort);
309321
}
310322
}

0 commit comments

Comments
 (0)