我想在我正在编写的REST API中允许分页。我想发送如下请求
GET /people?page[number]=1page[size]=25
或者
GET /people?page.number=1page.size=25
然后
@RequestMapping(value = "/people", params = { "page" })
public void findAll(@RequestParam("page") PaginationInformation paginationInformation) {
}
PaginationInformation
只是一个普通的老pojo,有number
和size
吸气剂和制定者。
在最新版本的Spring中是否可以这样?我意识到我可以传递pageNumber
和pageSize
并绑定为整数但我宁愿使用和对象,因为我也想支持过滤,这将更加复杂。
答案 0 :(得分:2)
您可以将请求参数绑定到Spring中的自定义模型对象,如下所示:
public class Page {
private int pageOffset;
private int pageSize;
// Getters and setters omitted
}
@RequestMapping("/people")
public void findAll(Page page) {
}
如果您发送GET /foo?pageOffset=0&pageSize=25
之类的请求,那么page
参数将填充这些值。另请注意,没有@RequestParam
注释。
已解决的Page
对象将由ServletModelAttributeMethodProcessor
提供给处理程序,因此请随时查看其源代码以获取更多详细信息。
如果您需要更灵活地自定义分页参数的分辨率,则可以实现自定义HandlerMethodArgumentResolver
。如果您决定采用这种方式(或将Spring Data JPA用于持久层),则可以使用PageableHandlerMethodArgumentResolver
中的Spring Data JPA作为灵感。
答案 1 :(得分:1)
Bohuslav Burghardt在他的回答中解释了最简单的方法:使用命令对象/表单支持对象来选择两个参数。 你明确地问:
在最新版本的Spring中是否可以这样?
因为我认为命令对象的方式是众所周知的,所以你需要另一种更强大的方法。是的,有一个(它自Spring 3.1以来就存在)。
<强> HandlerMethodArgumentResolver
强>
因为你有一个特殊的用例:分页;我不会解释为什么需要开发HandlerMethodArgumentResolver
。相反,我建议你看一下:
spring-data-commons
的{{3}}的code和org.springframework.data.web.PageableHandlerMethodArgumentResolver
。 (我的Section 3.7.1. Web support可能会帮助您了解如何处理HandlerMethodArgumentResolver
以及如何注册它们
因此,您可以开发自己的HandlerMethodArgumentResolver
或仅使用PageableHandlerMethodArgumentResolver
表格弹簧数据。