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

标签 paging spring-data-rest

我正在使用 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/

    相关文章:

    java - Spring:使用 @RepositoryRestController 时,非空属性引用空值或 transient 值

    java - Spring data rest 中自定义分页和排序的查询

    Spring Boot MongoDB REST - 自定义存储库方法

    x86 - 何时执行或不执行 INVLPG,MOV 到 CR3 以最小化 TLB 刷新

    c - C语言如何使用Bitwise提取页码和偏移量

    asp.net - 用于 gridview 分页的 PagedDatasource

    java - 如何使用 Spring Data REST 公开可写的 REST api?

    android - 用于水平和垂直分页的模拟 ViewPager

    python - Freebase:使用游标有配额限制吗?

    spring-security - 同一实体的两个存储库,一个已导出,一个未导出