我有一个使用 Java 的 Spring Boot 项目。在前端我只使用 HTML、Bootstrap 和 Thymeleaf。我在那里创建了一个搜索栏,并将其连接到搜索控制器。搜索到的数据来自私有API。
现在我想不使用滚动条而是在多个页面上显示找到的结果。为此,我还选择了 Bootstrap 模板并将其集成。 (查看)
但现在我必须实现后端、模型和控制器。我的问题是:我对 Java Spring 还很陌生,因此正在寻找教程或解释如何实现它。我只找到数据来自数据库而不是 API 的教程。在我的 API 中,分页数据如下所示:
我不想在这里有一个预先咀嚼的解决方案,只是一个解释,也许是一个例子,因为正如我所说,我找不到可以遵循的例子。我完全不知道如何实现控制器来控制分页,以便当我单击“第一页”、“下一页”、“最后一页”按钮时它会跳转到它们。
有人有一个例子和解释我如何自己做吗?
期待您的答复
为了自己解决问题,我已经搜索了教程,浏览了 Spring 上的 Udemy 课程,询问了 ChatGPT。
您需要的解决方案将取决于您的表格的复杂程度,即您是否具有过滤和排序功能? 从示例中您可以看出,只需要服务器端分页,无需任何过滤和排序。
我会将 Pageable 与内置 Spring Data JPA 方法一起使用,例如存储库中的
findAll()
。
我要做的是首先创建一个控制器来请求数据。
@GetMapping("/data")
public Page<Data> getDataWithPagination(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "10") int size) {
return yourService.findPaginatedData(PageRequest.of(page, size));
}
PageRequest.of(page, size))
是 Pageable
的实例,您可以在此处定义当前页面以及您希望每个页面的大小。如果您想在分页中包含排序,您也可以在此处添加它。
接下来创建您的存储库
public interface YourRepository extends PagingAndSortingRepository<Data, Long> {
Page<Data> findAll(Pageable pageable);
}
然后从您的服务中调用这个
findAll()
方法。
@Service
public class YourService {
@Autowired
private YourRepository yourRepository;
public Page<Data> findPaginatedData(Pageable pageable) {
return yourRepository.findAll(pageable);
}
}
这就是您开始所需的全部内容。如果您想要更复杂,我建议您研究将规范传递到您的
findAll()
方法中,并通过条件生成器进行一些过滤。