Spring PageableArgumentResolver 已弃用,如何使用 PageableHandlerMethodArgumentResolver?

2022-09-04 22:07:36

这是我当前的分页解析器:

@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
    PageableArgumentResolver resolver = new PageableArgumentResolver();
    resolver.setFallbackPageable(new PageRequest(1, 5));
    argumentResolvers.add(new ServletWebArgumentResolverAdapter(resolver));
}

但是PageableArgumentResolver已被弃用,并链接到PageableHandlerMethodArgumentResolver,我想我们可以在没有适配器的情况下注册,如下所示:

@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
    PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();
    resolver.setFallbackPageable(new PageRequest(0, 5));
    argumentResolvers.add(resolver);
}

首先,新类PageableHandlerMethodArgumentResolver的实现有点不同,因为指的是2。页面,所以我不得不使用它,以便它显示第一页。new PageRequest(1, 5)new PageRequest(0, 5)

但是我仍然对这个新对象有问题。当我调用不带参数的URL时,分页栏的首次加载是完美的(既不 page.page 也不 page.page page.size)。然后,当我想在分页栏上移动时,我们使用2个参数调用相同的url(例如page.page=3&page.size=5),仍然显示第一页。我认为这个新的解析器需要的不仅仅是这2个参数,这样它就不会激活回退条件。你有没有知道如何使用这个PageableHandlerMethodArgumentResolver?


答案 1

我刚刚在此类的实现中找到了答案。现在,我们需要对这个新类进行 2 项更改:

  1. 参数不再具有前缀“page”。“” 有效。..?page=2&size=5
  2. 由于第1页指的是2。现在,我们必须在分页中重新定义参数.jsp:而不是..?page=${item.number-1}..?page=${item.number}

答案 2

您可以使用以下方法更改参数名称:setPageParameterName,setSizeParameterName。

如果初始页为 1,请将此集OneIndexed参数设置为 true。

@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
    PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();
    resolver.setPageParameterName("page.page");
    resolver.setSizeParameterName("page.size");
    resolver.setOneIndexedParameters(true);
    argumentResolvers.add(resolver);
    super.addArgumentResolvers(argumentResolvers);
}

推荐