
org.springframework.data.web.PageableHandlerMethodArgumentResolverCustom Maven / Gradle / Ivy
package org.springframework.data.web;
import java.util.Iterator;
import org.springframework.core.MethodParameter;
import org.springframework.core.Ordered;
import org.springframework.data.domain.OffsetRequest;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.domain.Sort.Order;
import org.springframework.util.Assert;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.ModelAndViewContainer;
public class PageableHandlerMethodArgumentResolverCustom extends PageableHandlerMethodArgumentResolver implements Ordered {
private static final String DEFAULT_NEXT_PARAMETER = "next";
private static final String DEFAULT_PREV_PARAMETER = "prev";
private static final String DEFAULT_ALL_PARAMETER = "all";
static final Order DEFAULT_ORDER = new Order(Direction.DESC, "id");
private Order fallbackOrder = DEFAULT_ORDER;
private String nextParameterName = DEFAULT_NEXT_PARAMETER;
private String prevParameterName = DEFAULT_PREV_PARAMETER;
private String allParameterName = DEFAULT_ALL_PARAMETER;
private int order = 0;
public PageableHandlerMethodArgumentResolverCustom(SortHandlerMethodArgumentResolver sortResolver) {
super(sortResolver);
setFallbackPageable(new PageRequest(0, 10, new org.springframework.data.domain.Sort(this.fallbackOrder)));
setMaxPageSize(Integer.MAX_VALUE);
}
public void setFallbackOrder(Order order) {
Assert.notNull(order, "Order must not be null!");
this.fallbackOrder = order;
}
public void setNextParameterName(String nextParameterName) {
Assert.hasText(nextParameterName, "Next parameter name must not be null or empty!");
this.nextParameterName = nextParameterName;
}
public void setPrevParameterName(String prevParameterName) {
Assert.hasText(prevParameterName, "Prev parameter name must not be null or empty!");
this.prevParameterName = prevParameterName;
}
public void setAllParameterName(String allParameterName) {
Assert.hasText(allParameterName, "All parameter name must not be null or empty!");
this.allParameterName = allParameterName;
}
/**
*
* StringUtils.hasText(next) && (direction = Direction.fromStringOrNull(next)) == null && StringUtils.hasText(prev) && (direction = Direction.fromStringOrNull(prev)) == null
*
*/
@Override
public Pageable resolveArgument(MethodParameter methodParameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
Pageable pageable = super.resolveArgument(methodParameter, mavContainer, webRequest, binderFactory);
if (pageable == null) {
return null;
}
if (webRequest.getParameter(getParameterNameToUse(this.allParameterName, methodParameter)) != null) {
return new PageRequest(0, Integer.MAX_VALUE, pageable.getSort());
}
String nextString = webRequest.getParameter(getParameterNameToUse(this.nextParameterName, methodParameter));
String prevString = webRequest.getParameter(getParameterNameToUse(this.prevParameterName, methodParameter));
if ((nextString == null && prevString == null) || (nextString != null && prevString != null)) {
return new OffsetRequest(pageable.getPageNumber(), pageable.getPageSize(), pageable.getSort(), getPageParameterName(), getSizeParameterName(), this.nextParameterName, this.prevParameterName);
}
Iterator iterator;
Order result = (pageable.getSort() != null && (iterator = pageable.getSort().iterator()) != null && iterator.hasNext()
&& (result = iterator.next()).getProperty().equals(this.fallbackOrder.getProperty()) && !iterator.hasNext()) ? result : null;
if (result == null) {
return new OffsetRequest(pageable.getPageNumber(), pageable.getPageSize(), pageable.getSort(), getPageParameterName(), getSizeParameterName(), this.nextParameterName, this.prevParameterName);
}
int id = nextString == null ? -pageable.getPageNumber() : pageable.getPageNumber();
return new OffsetRequest(0, pageable.getPageSize(), pageable.getSort(), getPageParameterName(), getSizeParameterName(), this.nextParameterName, this.prevParameterName, result.getDirection(), id);
}
public void setOrder(int order) {
this.order = order;
}
@Override
public int getOrder() {
return order;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy