sma*_*ufo 10 java spring spring-mvc
我想在控制器中使用Spring自动构建Pageable对象.所以我定义:
@RequestMapping("/list")
public String list(Model model , Pageable pageable) {
logger.info("pageable = {}" , pageable);
// ... skipped
}
Run Code Online (Sandbox Code Playgroud)
我定义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);
}
}
Run Code Online (Sandbox Code Playgroud)
我将页面大小覆盖为10(默认为20),并设置为基于1的分页.运行页面时.我看到日志:
Controller - pageable = Page request [number: 0, size 10, sort: null]
Run Code Online (Sandbox Code Playgroud)
如果我?page=1&size=1
在URL中添加参数' ',它仍会打印:
Controller - pageable = Page request [number: 0, size 10, sort: null]
Run Code Online (Sandbox Code Playgroud)
如果我将参数更改为?sort=id
,它会记录:
Controller - pageable = Page request [number: 0, size 10, sort: id: ASC]
Run Code Online (Sandbox Code Playgroud)
似乎我的默认大小(10)正常工作,sort
参数正确传递给Pageable.但为什么参数页面和大小不能在这里工作?
在PageableHandlerMethodArgumentResolver
源代码中,它指定
private static final String DEFAULT_PAGE_PARAMETER = "page";
private static final String DEFAULT_SIZE_PARAMETER = "size";
Run Code Online (Sandbox Code Playgroud)
但我不知道为什么它仍然不起作用.我错过了什么吗?
环境:
spring-boot 1.3.1.RELEASE
spring-webmvc 4.2.3.RELEASE
Run Code Online (Sandbox Code Playgroud)
=========更新了=========
谢谢@TimeTravel的回答.
似乎没有办法在这里定义一个1-based
&size
是真正的10(不是减去1 = 9)Pageable
对象.
正确的解决方案仍在等待......(手动创建除外)
=========再次更新=========
这似乎是它的错误spring-data-jpa:1.9.0.RELEASE
.升级到之后spring-data-jpa:1.9.2.RELEASE
,现在可以使用了.
有关详细信息,请参阅DATACMNS-761.
Omk*_*kar 10
您必须使用argumentResolvers作为参数调用超类addArgumentResolvers方法.
super.addArgumentResolvers(argumentResolvers);
Run Code Online (Sandbox Code Playgroud)
检查下面的代码.
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();
resolver.setMaxPageSize(10);
resolver.setOneIndexedParameters(true);
argumentResolvers.add(resolver);
super.addArgumentResolvers(argumentResolvers);
}
Run Code Online (Sandbox Code Playgroud)
由于您已设置 resolver.setOneIndexedParameters(true);
,因此您的页面number
将从0开始.因此,如果您page=1
在URL中设置,则可分页对象将具有number=0
.如果你把它设置为false或删除语句,那么size=1
在URL会number=1
在pageable
对象.
来自文档 - 受保护的boolean isOneIndexedParameters()
指示是否在请求参数中公开和假设从1开始的页码索引.默认为false,表示请求中的页码0等于第一页.如果将其设置为true,则请求中的页码1将被视为第一页.
随着上述两个变化到位 -
page=1&sort=id&size=1
将返回 [number: 1, size 1, sort: id: ASC]
归档时间: |
|
查看次数: |
3901 次 |
最近记录: |