Make parameter names for sorting and paging and what repositories to export configurable.
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user