Refine @PageableDefault and @SortDefault annotations.
We now use MergedAnnotations to evaluate annotation attributes and to use aliasing across attributes. Also, SortDefault is not repeatable. Closes #2657
This commit is contained in:
@@ -96,7 +96,7 @@ abstract class PageableDefaultUnitTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
void rejectsInvalidQulifiers() throws Exception {
|
||||
void rejectsInvalidQualifiers() {
|
||||
|
||||
var parameter = TestUtils.getParameterOfMethod(getControllerClass(), "invalidQualifiers",
|
||||
Pageable.class, Pageable.class);
|
||||
@@ -110,7 +110,7 @@ abstract class PageableDefaultUnitTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
void rejectsNoQualifiers() throws Exception {
|
||||
void rejectsNoQualifiers() {
|
||||
|
||||
var parameter = TestUtils.getParameterOfMethod(getControllerClass(), "noQualifiers", Pageable.class,
|
||||
Pageable.class);
|
||||
|
||||
@@ -36,6 +36,7 @@ import org.springframework.web.context.request.ServletWebRequest;
|
||||
* @author Oliver Gierke
|
||||
* @author Nick Williams
|
||||
* @author Vedran Pavic
|
||||
* @author Mark Paluch
|
||||
*/
|
||||
class PageableHandlerMethodArgumentResolverUnitTests extends PageableDefaultUnitTests {
|
||||
|
||||
@@ -106,13 +107,20 @@ class PageableHandlerMethodArgumentResolverUnitTests extends PageableDefaultUnit
|
||||
@Test // DATACMNS-377
|
||||
void rejectsInvalidCustomDefaultForPageSize() throws Exception {
|
||||
|
||||
var parameter = new MethodParameter(Sample.class.getMethod("invalidDefaultPageSize", Pageable.class),
|
||||
0);
|
||||
var parameter = new MethodParameter(Sample.class.getMethod("invalidDefaultPageSize", Pageable.class), 0);
|
||||
|
||||
assertThatIllegalStateException().isThrownBy(() -> assertSupportedAndResult(parameter, DEFAULT_PAGE_REQUEST)) //
|
||||
.withMessageContaining("invalidDefaultPageSize");
|
||||
}
|
||||
|
||||
@Test // GH-2657
|
||||
void considersValueAlias() throws Exception {
|
||||
|
||||
var parameter = new MethodParameter(Sample.class.getMethod("valuePageSize", Pageable.class), 0);
|
||||
|
||||
assertSupportedAndResult(parameter, PageRequest.of(0, 2));
|
||||
}
|
||||
|
||||
@Test // DATACMNS-408
|
||||
void fallsBackToFirstPageIfNegativePageNumberIsGiven() throws Exception {
|
||||
|
||||
@@ -289,6 +297,8 @@ class PageableHandlerMethodArgumentResolverUnitTests extends PageableDefaultUnit
|
||||
|
||||
void invalidDefaultPageSize(@PageableDefault(size = 0) Pageable pageable);
|
||||
|
||||
void valuePageSize(@PageableDefault(2) Pageable pageable);
|
||||
|
||||
void simpleDefault(@PageableDefault(size = PAGE_SIZE, page = PAGE_NUMBER) Pageable pageable);
|
||||
|
||||
void simpleDefaultWithSort(
|
||||
|
||||
@@ -153,20 +153,9 @@ class ReactiveSortHandlerMethodArgumentResolverUnitTests {
|
||||
assertThat(resolve(request, PARAMETER)).isEqualTo(Sort.by(DESC, "property1"));
|
||||
}
|
||||
|
||||
@Test // DATACMNS-1211
|
||||
void rejectsDoubleAnnotatedMethod() {
|
||||
|
||||
var parameter = getParameterOfMethod("invalid");
|
||||
|
||||
var resolver = new ReactiveSortHandlerMethodArgumentResolver();
|
||||
assertThat(resolver.supportsParameter(parameter)).isTrue();
|
||||
|
||||
assertThatIllegalArgumentException()
|
||||
.isThrownBy(() ->
|
||||
resolver.resolveArgumentValue(parameter, null,
|
||||
MockServerWebExchange.from(TestUtils.getWebfluxRequest())))
|
||||
.withMessageContaining(SortDefault.class.getSimpleName())
|
||||
.withMessageContaining(SortDefaults.class.getSimpleName()).withMessageContaining(parameter.toString());
|
||||
@Test // GH-2657
|
||||
void considersRepeatableAnnotation() {
|
||||
assertSupportedAndResolvedTo(getParameterOfMethod("repeatable"), Sort.by("one", "two", "three").ascending());
|
||||
}
|
||||
|
||||
@Test // DATACMNS-1211
|
||||
@@ -261,6 +250,6 @@ class ReactiveSortHandlerMethodArgumentResolverUnitTests {
|
||||
|
||||
void containeredDefault(@SortDefaults(@SortDefault({ "foo", "bar" })) Sort sort);
|
||||
|
||||
void invalid(@SortDefaults(@SortDefault({ "foo", "bar" })) @SortDefault({ "bar", "foo" }) Sort sort);
|
||||
void repeatable(@SortDefault({ "one", "two" }) @SortDefault({ "three" }) Sort sort);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,6 @@ import org.springframework.core.MethodParameter;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.domain.Sort.Direction;
|
||||
import org.springframework.data.domain.Sort.Order;
|
||||
import org.springframework.data.web.SortDefault.SortDefaults;
|
||||
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
||||
|
||||
/**
|
||||
@@ -91,19 +90,9 @@ abstract class SortDefaultUnitTests {
|
||||
assertThat(getResolver().supportsParameter(parameter)).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
void rejectsDoubleAnnotatedMethod() {
|
||||
|
||||
var parameter = getParameterOfMethod("invalid");
|
||||
|
||||
HandlerMethodArgumentResolver resolver = new SortHandlerMethodArgumentResolver();
|
||||
assertThat(resolver.supportsParameter(parameter)).isTrue();
|
||||
|
||||
assertThatIllegalArgumentException()
|
||||
.isThrownBy(() -> resolver.resolveArgument(parameter, null, TestUtils.getWebRequest(), null)) //
|
||||
.withMessageContaining(SortDefault.class.getSimpleName()) //
|
||||
.withMessageContaining(SortDefaults.class.getSimpleName()) //
|
||||
.withMessageContaining(parameter.toString());
|
||||
@Test // GH-2657
|
||||
void considersRepeatableAnnotation() throws Exception {
|
||||
assertSupportedAndResolvedTo(getParameterOfMethod("repeatable"), Sort.by("one", "two", "three").ascending());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -324,7 +324,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 repeatable(@SortDefault({ "one", "two" }) @SortDefault({ "three" }) Sort sort);
|
||||
|
||||
void emptyQualifier(@Qualifier Sort sort);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user