diff --git a/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverSupport.java b/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverSupport.java index 4aa383a822..6395423de8 100644 --- a/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverSupport.java +++ b/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverSupport.java @@ -230,7 +230,7 @@ protected String getParameterNameToUse(String source, @Nullable MethodParameter Qualifier qualifier = parameter == null ? null : parameter.getParameterAnnotation(Qualifier.class); - if (qualifier != null) { + if (qualifier != null && StringUtils.hasLength(qualifier.value())) { builder.append(qualifier.value()); builder.append(qualifierDelimiter); } diff --git a/src/main/java/org/springframework/data/web/SortHandlerMethodArgumentResolverSupport.java b/src/main/java/org/springframework/data/web/SortHandlerMethodArgumentResolverSupport.java index e02326d5f6..614af60ea1 100644 --- a/src/main/java/org/springframework/data/web/SortHandlerMethodArgumentResolverSupport.java +++ b/src/main/java/org/springframework/data/web/SortHandlerMethodArgumentResolverSupport.java @@ -186,8 +186,9 @@ protected String getSortParameter(@Nullable MethodParameter parameter) { Qualifier qualifier = parameter != null ? parameter.getParameterAnnotation(Qualifier.class) : null; - if (qualifier != null) { - builder.append(qualifier.value()).append(qualifierDelimiter); + if (qualifier != null && StringUtils.hasLength(qualifier.value())) { + builder.append(qualifier.value()); + builder.append(qualifierDelimiter); } return builder.append(sortParameter).toString(); diff --git a/src/test/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverUnitTests.java b/src/test/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverUnitTests.java index fa9050f46d..295f63b5e6 100755 --- a/src/test/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverUnitTests.java +++ b/src/test/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverUnitTests.java @@ -35,6 +35,7 @@ * * @author Oliver Gierke * @author Nick Williams + * @author Vedran Pavic */ class PageableHandlerMethodArgumentResolverUnitTests extends PageableDefaultUnitTests { @@ -244,6 +245,18 @@ void detectsFallbackPageableIfNullOneIsConfigured() { assertThat(resolver.isFallbackPageable(PageRequest.of(0, 10))).isFalse(); } + @Test // DATACMNS-1827 + void emptyQualifierIsUsedInParameterLookup() throws Exception { + + MethodParameter parameter = new MethodParameter(Sample.class.getMethod("emptyQualifier", Pageable.class), 0); + + MockHttpServletRequest request = new MockHttpServletRequest(); + request.addParameter("page", "2"); + request.addParameter("size", "10"); + + assertSupportedAndResult(parameter, PageRequest.of(2, 10), request); + } + @Override protected PageableHandlerMethodArgumentResolver getResolver() { PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver(); @@ -283,5 +296,7 @@ void simpleDefaultWithContaineredExternalSort(@PageableDefault(size = PAGE_SIZE, void validQualifier(@Qualifier("foo") Pageable pageable); void noQualifiers(Pageable first, Pageable second); + + void emptyQualifier(@Qualifier Pageable pageable); } } diff --git a/src/test/java/org/springframework/data/web/SortHandlerMethodArgumentResolverUnitTests.java b/src/test/java/org/springframework/data/web/SortHandlerMethodArgumentResolverUnitTests.java index 972fe45588..e89a8361b6 100755 --- a/src/test/java/org/springframework/data/web/SortHandlerMethodArgumentResolverUnitTests.java +++ b/src/test/java/org/springframework/data/web/SortHandlerMethodArgumentResolverUnitTests.java @@ -45,6 +45,7 @@ * @author Thomas Darimont * @author Nick Williams * @author Mark Paluch + * @author Vedran Pavic */ class SortHandlerMethodArgumentResolverUnitTests extends SortDefaultUnitTests { @@ -241,6 +242,15 @@ void resolvesDotOnlyInputToDefault() { }); } + @Test // DATACMNS-1827 + void emptyQualifierIsUsedInParameterLookup() { + + MethodParameter parameter = getParameterOfMethod("emptyQualifier"); + Sort reference = Sort.by("bar", "foo"); + + assertSupportedAndResolvedTo(getRequestWithSort(reference, ""), parameter, reference); + } + private static Sort resolveSort(HttpServletRequest request, MethodParameter parameter) throws Exception { SortHandlerMethodArgumentResolver resolver = new SortHandlerMethodArgumentResolver(); @@ -306,5 +316,7 @@ void simpleDefaultWithDirectionCaseInsensitive( void containeredDefault(@SortDefaults(@SortDefault({ "foo", "bar" })) Sort sort); void invalid(@SortDefaults(@SortDefault({ "foo", "bar" })) @SortDefault({ "bar", "foo" }) Sort sort); + + void emptyQualifier(@Qualifier Sort sort); } }