diff --git a/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverSupport.java b/src/main/java/org/springframework/data/web/PageableHandlerMethodArgumentResolverSupport.java index 4aa383a82..6395423de 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 @@ public abstract class PageableHandlerMethodArgumentResolverSupport { 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 e02326d5f..614af60ea 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 @@ public abstract class SortHandlerMethodArgumentResolverSupport { 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 fa9050f46..295f63b5e 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 @@ import org.springframework.web.context.request.ServletWebRequest; * * @author Oliver Gierke * @author Nick Williams + * @author Vedran Pavic */ class PageableHandlerMethodArgumentResolverUnitTests extends PageableDefaultUnitTests { @@ -244,6 +245,18 @@ class PageableHandlerMethodArgumentResolverUnitTests extends PageableDefaultUnit 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 @@ class PageableHandlerMethodArgumentResolverUnitTests extends PageableDefaultUnit 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 972fe4558..e89a8361b 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 @@ import org.springframework.web.context.request.ServletWebRequest; * @author Thomas Darimont * @author Nick Williams * @author Mark Paluch + * @author Vedran Pavic */ class SortHandlerMethodArgumentResolverUnitTests extends SortDefaultUnitTests { @@ -241,6 +242,15 @@ class SortHandlerMethodArgumentResolverUnitTests extends SortDefaultUnitTests { }); } + @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 @@ class SortHandlerMethodArgumentResolverUnitTests extends SortDefaultUnitTests { void containeredDefault(@SortDefaults(@SortDefault({ "foo", "bar" })) Sort sort); void invalid(@SortDefaults(@SortDefault({ "foo", "bar" })) @SortDefault({ "bar", "foo" }) Sort sort); + + void emptyQualifier(@Qualifier Sort sort); } }