Mic*_*ser 10 paging spring-data-rest
我正在使用spring-data-rest JpaRepository来创建Rest-Endpoints.默认情况下,为所有人启用分页JpaRepository,这是一件好事.但我有一个遗留应用程序,我们移植到不支持分页的新堆栈.我想根据URL-Parameter禁用分页,以便仍能在新的应用程序代码中使用分页.
我尝试了各种方法来使用和不使用分页来公开资源:
CrudRepository:结果只有一个未分页的端点,并且flush缺少该方法.List<T> findAll()我的存储库界面中的方法并使用注释进行注释RestResource.我原以为该方法将作为搜索方法公开,但事实并非如此.Page<T> findAll(Pageable pageable)与@RestResource(exported=false)和注释List<T> findAll(),如之前的子弹.我跳过这个替换默认方法.但无论如何这都不是有效的解决方案,因为只暴露了非分页端点.size=-1以获得无限结果 - >使用默认分页大小我已经看到spring-controller RepositoryEntityController使用a RepositoryInvoker来调用存储库中的方法.在Pageable使用解决PageableHandlerMethodArgumentResolver它总是返回一个可分页(在查询中指定,注释或默认分页).我目前看到的唯一解决方案是实现一个PageableHandlerMethodArgumentResolver返回null的自定义,如果传递了自定义url参数.
你知道其他任何解决方案还是未来有类似的计划?
谢谢,米哈
我使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅:https://jira.spring.io/browse/DATACMNS-929
这样,如果请求中包含页面和大小,则会获得请求的页面,但如果它们不在请求中,则会获得所有记录.在这两种情况下,如果指定了排序,则它用于对数据进行排序.在第二种情况下,记录在页面内返回,但我可以忍受.
编辑
https://jira.spring.io/browse/DATACMNS-929已修复,因此使用新版本,您将能够使用nullfallbackPageable 配置您的解析器.这样,当存在可分页数据(即page和size)时,您将检索一个页面,但是当它不是您检索所有记录时:
@Configuration
public class RestApiConfiguration extends RepositoryRestConfigurerAdapter {
@Bean
public HateoasPageableHandlerMethodArgumentResolver customResolver(
HateoasPageableHandlerMethodArgumentResolver pageableResolver) {
pageableResolver.setOneIndexedParameters(true);
pageableResolver.setFallbackPageable(null);
return pageableResolver;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将自己的方法添加到 Repository 接口,并且返回类型为List<DomainObject>或Collection<DomainObject>且没有Pageable参数。这将导致使用非寻呼响应。然后,您可以将旧客户端指向这些方法而不是默认方法。
或者,您可以将默认页面大小配置为非常大。设置spring.data.rest.default-page-size在application.properties.
| 归档时间: |
|
| 查看次数: |
6186 次 |
| 最近记录: |