Make parameter names for sorting and paging and what repositories to export configurable.

This commit is contained in:
Jon Brisbin
2012-07-20 16:42:53 -05:00
parent 7bb48e3eb9
commit 014271d7db
4 changed files with 81 additions and 45 deletions

View File

@@ -123,7 +123,7 @@ public abstract class RepositoryExporter<M extends RepositoryMetadata<E>, E exte
repositories = new Repositories(applicationContext);
repositoryMetadata = new HashMap<String, M>();
for (Class<?> domainType : repositories) {
if (exportOnlyTheseClasses.isEmpty() || !exportOnlyTheseClasses.contains(domainType.getName())) {
if (exportOnlyTheseClasses.isEmpty() || exportOnlyTheseClasses.contains(domainType.getName())) {
Class<?> repoClass = repositories.getRepositoryInformationFor(domainType).getRepositoryInterface();
String name = StringUtils.uncapitalize(repoClass.getSimpleName().replaceAll("Repository", ""));
RestResource resourceAnno = repoClass.getAnnotation(RestResource.class);

View File

@@ -14,18 +14,12 @@ import org.springframework.web.util.UriComponentsBuilder;
*/
public class PagingAndSorting implements Pageable {
final String pageParameter;
final String limitParameter;
final String orderParameter;
private final RepositoryRestConfiguration config;
private final PageRequest pageRequest;
public PagingAndSorting(String pageParameter,
String limitParameter,
String orderParameter,
public PagingAndSorting(RepositoryRestConfiguration config,
PageRequest pageRequest) {
this.pageParameter = pageParameter;
this.limitParameter = limitParameter;
this.orderParameter = orderParameter;
this.config = config;
this.pageRequest = pageRequest;
}
@@ -35,7 +29,7 @@ public class PagingAndSorting implements Pageable {
Iterator<Sort.Order> iter = sort.iterator();
while (iter.hasNext()) {
Sort.Order order = iter.next();
urib.queryParam(orderParameter, order.getProperty());
urib.queryParam(config.getSortParamName(), order.getProperty());
try {
urib.queryParam(URLEncoder.encode(order.getProperty() + ".dir", "ISO-8859-1"),
order.getDirection().toString().toLowerCase());

View File

@@ -22,37 +22,13 @@ import org.springframework.web.method.support.ModelAndViewContainer;
public class PagingAndSortingMethodArgumentResolver implements HandlerMethodArgumentResolver {
private static final int DEFAULT_PAGE = 1; // We're 1-based, not 0-based
private static final int DEFAULT_LIMIT = 20;
private String pageParameter = "page";
private String limitParameter = "limit";
private String sortParameter = "sort";
private RepositoryRestConfiguration config = RepositoryRestConfiguration.DEFAULT;
public String getPageParameter() {
return pageParameter;
}
public PagingAndSortingMethodArgumentResolver setPageParameter(String pageParameter) {
this.pageParameter = pageParameter;
return this;
}
public String getLimitParameter() {
return limitParameter;
}
public PagingAndSortingMethodArgumentResolver setLimitParameter(String limitParameter) {
this.limitParameter = limitParameter;
return this;
}
public String getSortParameter() {
return sortParameter;
}
public PagingAndSortingMethodArgumentResolver setSortParameter(String sortParameter) {
this.sortParameter = sortParameter;
return this;
public PagingAndSortingMethodArgumentResolver(RepositoryRestConfiguration config) {
if (null != config) {
this.config = config;
}
}
@Override public boolean supportsParameter(MethodParameter parameter) {
@@ -76,14 +52,14 @@ public class PagingAndSortingMethodArgumentResolver implements HandlerMethodArgu
}
if (null == pr) {
int page = DEFAULT_PAGE;
String sPage = request.getParameter(pageParameter);
String sPage = request.getParameter(config.getPageParamName());
if (StringUtils.hasText(sPage)) {
try {
page = Integer.parseInt(sPage);
} catch (NumberFormatException ignored) {}
}
int limit = DEFAULT_LIMIT;
String sLimit = request.getParameter(limitParameter);
int limit = config.getDefaultPageSize();
String sLimit = request.getParameter(config.getLimitParamName());
if (StringUtils.hasText(sLimit)) {
try {
limit = Integer.parseInt(sLimit);
@@ -92,7 +68,7 @@ public class PagingAndSortingMethodArgumentResolver implements HandlerMethodArgu
Sort sort = null;
List<Sort.Order> orders = new ArrayList<Sort.Order>();
String[] orderValues = request.getParameterValues(sortParameter);
String[] orderValues = request.getParameterValues(config.getSortParamName());
if (null != orderValues) {
for (String orderParam : orderValues) {
String sortDir = request.getParameter(orderParam + ".dir");
@@ -111,7 +87,7 @@ public class PagingAndSortingMethodArgumentResolver implements HandlerMethodArgu
}
}
return new PagingAndSorting(pageParameter, limitParameter, sortParameter, pr);
return new PagingAndSorting(config, pr);
}
}

View File

@@ -0,0 +1,66 @@
package org.springframework.data.rest.webmvc;
import java.util.Collections;
import java.util.List;
import org.springframework.http.converter.HttpMessageConverter;
/**
* @author Jon Brisbin
*/
public class RepositoryRestConfiguration {
public static final RepositoryRestConfiguration DEFAULT = new RepositoryRestConfiguration();
private int defaultPageSize = 20;
private String pageParamName = "page";
private String limitParamName = "limit";
private String sortParamName = "sort";
private List<HttpMessageConverter<?>> customConverters = Collections.emptyList();
public int getDefaultPageSize() {
return defaultPageSize;
}
public RepositoryRestConfiguration setDefaultPageSize( int defaultPageSize ) {
this.defaultPageSize = defaultPageSize;
return this;
}
public String getPageParamName() {
return pageParamName;
}
public RepositoryRestConfiguration setPageParamName( String pageParamName ) {
this.pageParamName = pageParamName;
return this;
}
public String getLimitParamName() {
return limitParamName;
}
public RepositoryRestConfiguration setLimitParamName( String limitParamName ) {
this.limitParamName = limitParamName;
return this;
}
public String getSortParamName() {
return sortParamName;
}
public RepositoryRestConfiguration setSortParamName( String sortParamName ) {
this.sortParamName = sortParamName;
return this;
}
public List<HttpMessageConverter<?>> getCustomConverters() {
return customConverters;
}
public RepositoryRestConfiguration setCustomConverters( List<HttpMessageConverter<?>> customConverters ) {
this.customConverters = customConverters;
return this;
}
}