Spring4 MVC Controller Pageable无法正常工作

我希望Spring在controller中自动构建Pageable对象。所以我定义:

@RequestMapping("/list")

public String list(Model model , Pageable pageable) {

logger.info("pageable = {}" , pageable);

// ... skipped

}

PageableHandlerMethodArgumentResolver在中定义WebMvcConfigurerAdapter

@Configuration

public class MvcConfig extends WebMvcConfigurerAdapter {

@Override

public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {

PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();

resolver.setMaxPageSize(10);

resolver.setOneIndexedParameters(true);

argumentResolvers.add(resolver);

}

}

我将页面大小覆盖为10(默认为20),并设置为基于1的页面调度。运行页面时。我看到日志:

Controller - pageable = Page request [number: 0, size 10, sort: null]

如果我?page=1&size=1在网址中添加参数“ ”,它仍会显示:

Controller - pageable = Page request [number: 0, size 10, sort: null]

如果将参数更改为?sort=id,它将记录:

Controller - pageable = Page request [number: 0, size 10, sort: id: ASC]

看来我的默认大小(10)正在工作,并且sort参数已正确传递给Pageable。但是为什么参数页和大小在这里不起作用?

PageableHandlerMethodArgumentResolver源代码中,它指定

private static final String DEFAULT_PAGE_PARAMETER = "page";

private static final String DEFAULT_SIZE_PARAMETER = "size";

但是我不知道为什么它仍然不起作用。我想念什么吗?

环境:

spring-boot 1.3.1.RELEASE

spring-webmvc 4.2.3.RELEASE

=========更新=========

感谢@TimeTravel的回答。

似乎没有办法在此处定义1-basedsize是真正的10(不是负1 = 9)Pageable对象。

正确的解决方案仍在等待中…(手动创建除外)

=========再次更新=========

看来这是的错误spring-data-jpa:1.9.0.RELEASE。升级到后spring-data-

jpa:1.9.2.RELEASE,现在可以使用。

有关详细信息,请参见DATACMNS-761。

回答:

您必须使用argumentsResolvers作为参数来调用超类addArgumentResolvers方法。

 super.addArgumentResolvers(argumentResolvers);

检查下面的代码。

@Override

public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {

PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();

resolver.setMaxPageSize(10);

resolver.setOneIndexedParameters(true);

argumentResolvers.add(resolver);

super.addArgumentResolvers(argumentResolvers);

}

既然已经设置了

resolver.setOneIndexedParameters(true);,您的页面number将从0开始。因此,如果您page=1在URL中设置,则可分页对象将具有number=0。如果将其设置为false或删除该语句,则size=1in

URL将具有number=1in pageable对象。

从文档开始- 受保护的boolean isOneIndexedParameters()

指示是否在请求参数中公开并假设基于1的页码索引。默认为false,表示请求中的页数0等于第一页。如果将其设置为true,则请求中的页码1将被视为第一页。

完成上述两项更改后-

page=1&sort=id&size=1 将返回 [number: 1, size 1, sort: id: ASC]

以上是 Spring4 MVC Controller Pageable无法正常工作 的全部内容, 来源链接: utcz.com/qa/411511.html

回到顶部