DATAREST-699 - Fixed pageable parameters showing up as is in search resource links on Java 8.
We now explicitly drop parameters of type Pageable and Sort from being exposed as search resource parameters as they're added via the UriComponentsContributors anyway. This prevents "pageable" from showing up as parameter on Java 8 code compiled with -parameters. The latter adds naming information for the Pageable parameter and caused it showing up as is despite the fact that the UriComponentsContributor for Pageables exposes a dedicated syntax.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2013-2014 the original author or authors.
|
||||
* Copyright 2013-2015 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -18,6 +18,7 @@ package org.springframework.data.rest.core.mapping;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@@ -41,6 +42,8 @@ import org.springframework.util.StringUtils;
|
||||
*/
|
||||
class RepositoryMethodResourceMapping implements MethodResourceMapping {
|
||||
|
||||
@SuppressWarnings("unchecked") //
|
||||
private static final Collection<Class<?>> IMPLICIT_PARAMETER_TYPES = Arrays.asList(Pageable.class, Sort.class);
|
||||
private static final AnnotationAttribute PARAM_VALUE = new AnnotationAttribute(Param.class);
|
||||
|
||||
private final boolean isExported;
|
||||
@@ -69,8 +72,8 @@ class RepositoryMethodResourceMapping implements MethodResourceMapping {
|
||||
|
||||
this.isExported = annotation != null ? annotation.exported() : true;
|
||||
this.rel = annotation == null || !StringUtils.hasText(annotation.rel()) ? method.getName() : annotation.rel();
|
||||
this.path = annotation == null || !StringUtils.hasText(annotation.path()) ? new Path(method.getName()) : new Path(
|
||||
annotation.path());
|
||||
this.path = annotation == null || !StringUtils.hasText(annotation.path()) ? new Path(method.getName())
|
||||
: new Path(annotation.path());
|
||||
this.method = method;
|
||||
this.parameterMetadata = discoverParameterMetadata(method, resourceRel.concat(".").concat(rel));
|
||||
|
||||
@@ -86,7 +89,8 @@ class RepositoryMethodResourceMapping implements MethodResourceMapping {
|
||||
List<ParameterMetadata> result = new ArrayList<ParameterMetadata>();
|
||||
|
||||
for (MethodParameter parameter : new MethodParameters(method, PARAM_VALUE).getParameters()) {
|
||||
if (StringUtils.hasText(parameter.getParameterName())) {
|
||||
if (!IMPLICIT_PARAMETER_TYPES.contains(parameter.getParameterType())
|
||||
&& StringUtils.hasText(parameter.getParameterName())) {
|
||||
result.add(new ParameterMetadata(parameter, baseRel));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,6 +135,18 @@ public class RepositoryMethodResourceMappingUnitTests {
|
||||
assertThat(mapping.getReturnedDomainType(), is(equalTo((Class) Person.class)));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATAREST-699
|
||||
*/
|
||||
@Test
|
||||
public void doesNotIncludePageableAsParameter() throws Exception {
|
||||
|
||||
Method method = PersonRepository.class.getMethod("findByLastname", String.class, Pageable.class);
|
||||
RepositoryMethodResourceMapping mapping = getMappingFor(method);
|
||||
|
||||
assertThat(mapping.getParametersMetadata().getParameterNames(), not(hasItem("pageable")));
|
||||
}
|
||||
|
||||
private RepositoryMethodResourceMapping getMappingFor(Method method) {
|
||||
return new RepositoryMethodResourceMapping(method, resourceMapping, metadata);
|
||||
}
|
||||
@@ -157,5 +169,8 @@ public class RepositoryMethodResourceMappingUnitTests {
|
||||
Page<Person> findByEmailAddress(String email, Sort pageable);
|
||||
|
||||
int countByLastname(String lastname);
|
||||
|
||||
// Simulate pageable detected as name on Java 8
|
||||
Page<Person> findByLastname(@Param("lastname") String lastname, @Param("pageable") Pageable pageable);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user