Spring4 MVC Controller Pageable无法正常工作
我希望Spring在controller中自动构建Pageable对象。所以我定义:
@RequestMapping("/list")public String list(Model model , Pageable pageable) {
logger.info("pageable = {}" , pageable);
// ... skipped
}
我PageableHandlerMethodArgumentResolver
在中定义WebMvcConfigurerAdapter
:
@Configurationpublic 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.RELEASEspring-webmvc 4.2.3.RELEASE
=========更新=========
感谢@TimeTravel的回答。
似乎没有办法在此处定义1-based
&size
是真正的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=1
in
URL将具有number=1
in 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