Spring Data Pageable:返回空内容

23

我刚接触Spring Data和Spring MVC,但是我不理解为什么我得到了空内容:

@RequestMapping(value="/pages", method=RequestMethod.GET)
@ResponseBody 
public Page<Client> contactsPages(@RequestParam int page, @RequestParam int size) {
    Pageable pageable = new PageRequest(page, size, new Sort("id"));
    Page<Client> pageResult = clientRepository.findAll(pageable);

    return pageResult;
} 

当我测试该URL时,我的JSON结果为:

{"content":[],"last":true,"totalElements":2,"totalPages":1,"size":5,"number":1,"sort":[{"direction":"ASC","property":"id","ignoreCase":false,"nullHandling":"NATIVE","ascending":true}],"first":false,"numberOfElements":0}

如果您有使用Spring Data、Spring MVC和AngularJS制作可分页请求的良好示例,对我来说将是一个很大的帮助。


1
你请求的是哪一页? - dambros
1
我之前请求的是第一页,但现在它已经正常工作了,我测试了页面为0的情况! - yeddez
4
第一个确实应该是0。 - dambros
非常感谢您的帮助。您是我的救星。 - yeddez
3个回答

78

确保你的PageRequest对象在请求小集合时使用0,而不是1

分页从0开始。

这是初学者常见的错误,并且在使用Spring分页与@Query结合时是一个常见的误导。如果你的@Query在没有分页的情况下工作,但在使用分页时返回为空,请检查页面编号。


你的意思是对于小型集合请求0吗? - Artanis Zeratul
5
哦我的天,整晚我都在努力解决这个问题。页面索引为0 :( - Tugrul
@Tugrul,我花了过去的4个小时试图解决这个问题,结果发现只是因为我将PageNumber传递为1而不是0。 - Saurabh Rana
1
2小时内解决这个问题,谢谢伙计。 - undefined
非常感谢!我一直在为调试我那些糟糕的代码而苦苦挣扎。 - undefined

3

我曾经遇到过类似的问题,是因为我在选择数据之后修改了数据,导致修改后的字段与搜索所用的字段相同。这意味着每次运行查询时,匹配的记录会越来越少,因此第一页始终会有新数据,因此在这种情况下始终使用第 0 页不会有影响,因为新记录始终会填充第 0 页。在另一种情况下,我没有修改搜索字段,每次执行选择语句时我的查询将匹配相同的记录,因此在这种情况下请求确切的页是很重要的。


你真是个天才。花了4个小时在这上面。一开始我使用了一个标志来选择记录,然后如果一切顺利,我会更新标志,这样就从我的下一页中删除了这些记录。不明白为什么这么线性,总是删除了我一半的记录。 - undefined

-2
Dharman的回答帮助我找到了原因。 如果您使用分页从数据库获取数据,并且在检索数据后更新搜索字段,则页面信息将会混乱。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接