我喜欢提供获取列表或页面的端点。清单将包括所有可用资源。要获取列表,客户端将不会提供page
和per_page
参数。
不幸的是,我无法在我的REST控制器中检测到这种情况,因为当客户端没有提供一个offset=0
和size=20
时,Spring Boot会自动提供一个Pageable对象。 我无法区分提供分页参数的用户和提供默认参数的Spring启动。
因此我无法知道客户想要完整列表。
我目前的解决方案是复制端点并将后缀/all
附加到提供List的那个。这不太令人满意。
在单个端点中提供这两个要求是否有意义? 如果是的话,我该如何实现呢?如果不是,您将如何提供该功能?
答案 0 :(得分:0)
您可以实现HandlerMethodArgumentResolver并在命中控制器之前检查是否存在参数。检查以下代码:
public class PaginationHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().equals(Pageable.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
String pageParam = webRequest.getParameter("page");
String sizeParam = webRequest.getParameter("size");
String sortParam = webRequest.getParameter("sort");
}
}