gpt4 book ai didi

paging - 如何在 spring-data-rest 中禁用 JpaRepository 的分页

转载 作者:行者123 更新时间:2023-12-04 03:26:45 24 4
gpt4 key购买 nike

我正在使用 JpaRepository创建休息端点。默认情况下,为所有 JpaRepository 启用分页,有什么好。但是我有一个遗留应用程序,我们将其移植到不支持分页的新堆栈中。我想根据 URL 参数禁用分页,以便仍然能够在新的应用程序代码中使用分页。

我尝试了各种方法来使用和不使用分页来公开资源:

  • 使用 CrudRepository :导致只有一个未分页的端点和方法 flush不见了。
  • 覆盖 List<T> findAll()我的存储库界面中的方法并用 RestResource 注释它.我原以为该方法将作为搜索方法公开,但事实并非如此。
  • 批注 Page<T> findAll(Pageable pageable)@RestResource(exported=false)并注释 List<T> findAll()就像之前的子弹一样。我希望这会取代默认方法。但这无论如何都不是有效的解决方案,因为只公开了一个非分页端点。
  • 通行证size=-1获得无限结果 -> 使用默认分页大小

  • 我见过 Spring Controller RepositoryEntityController使用 RepositoryInvoker调用存储库上的方法。 Pageable使用 PageableHandlerMethodArgumentResolver 解决它始终返回一个可分页(在查询中指定,带注释或默认可分页)。
    我目前看到的唯一解决方案是实现自定义 PageableHandlerMethodArgumentResolver如果传递自定义 url 参数,则返回 null。

    您知道任何其他解决方案或将来有类似的计划吗?

    最佳答案

    我使用 PagingAndSortingRepository 和这个配置来设置我的 pageableResolver:

    @Configuration
    public class RestApiConfiguration extends RepositoryRestConfigurerAdapter {

    @Bean
    public HateoasPageableHandlerMethodArgumentResolver customResolver(
    HateoasPageableHandlerMethodArgumentResolver pageableResolver) {
    pageableResolver.setOneIndexedParameters(true);
    pageableResolver.setFallbackPageable(new PageRequest(0, Integer.MAX_VALUE));
    pageableResolver.setMaxPageSize(Integer.MAX_VALUE);
    return pageableResolver;
    }
    }

    见: https://jira.spring.io/browse/DATACMNS-929

    这样,如果请求中包含页面和大小,您将获得请求的页面,但如果它们不在请求中,您将获得所有记录。在这两种情况下,如果指定了排序,则它用于对数据进行排序。
    在第二种情况下,记录在页面内返回,但我可以接受。

    编辑
    https://jira.spring.io/browse/DATACMNS-929已修复,因此在新版本中,您可以使用 null 配置解析器。回退可分页。这样,当存在可分页数据(即 pagesize )时,您将检索一页,但如果不是,则检索所有记录:
    @Configuration
    public class RestApiConfiguration extends RepositoryRestConfigurerAdapter {

    @Bean
    public HateoasPageableHandlerMethodArgumentResolver customResolver(
    HateoasPageableHandlerMethodArgumentResolver pageableResolver) {
    pageableResolver.setOneIndexedParameters(true);
    pageableResolver.setFallbackPageable(null);
    return pageableResolver;
    }
    }

    关于paging - 如何在 spring-data-rest 中禁用 JpaRepository 的分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31379902/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com