CassandraPageRequest 的序列化
Serialization of CassandraPageRequest
我在我的项目中使用 spring-data-cassandra,我想提供类似分页的功能(没有随机访问,没有特定页面 select - 只是向前抓取)。我可以使用此 PR 中描述的方法实现此效果:
https://github.com/spring-projects/spring-data-cassandra/pull/114
但是,我想序列化 Slice.nextPageable()
函数返回的 Pageable 对象,以通过 REST 接口公开此功能。这可能吗?
一种解决方案是将 Pageable 对象强制转换为 CassandraPageRequest,然后使用 .getPagingState 检索所需的对象。序列化后,可以从字符串创建 PagingState 并添加页面大小以创建 PageRequest。有点棘手且没有记录,但有效。请记住检查下一页是否存在以及 Pageable 是否真的是 CassandraPageRequest。示例代码如下:
// Serialize pageabele
if (isNull(pageable) || pageable.isUnpaged() || !(pageable instanceof
CassandraPageRequest)) {
return null;
}
final CassandraPageRequest cassandraPageRequest = ((CassandraPageRequest)
pageable);
if (isNull(cassandraPageRequest.getPagingState())) {
return null;
}
return cassandraPageRequest.getPagingState().toString();
// Create request from serialized object
CassandraPageRequest.of(PageRequest.of(0, pageSize),
PagingState.fromString(serializedPagingState));
这也是 SpringData Jira 上的问题。
https://jira.spring.io/browse/DATACASS-565#add-comment
我在我的项目中使用 spring-data-cassandra,我想提供类似分页的功能(没有随机访问,没有特定页面 select - 只是向前抓取)。我可以使用此 PR 中描述的方法实现此效果:
https://github.com/spring-projects/spring-data-cassandra/pull/114
但是,我想序列化 Slice.nextPageable()
函数返回的 Pageable 对象,以通过 REST 接口公开此功能。这可能吗?
一种解决方案是将 Pageable 对象强制转换为 CassandraPageRequest,然后使用 .getPagingState 检索所需的对象。序列化后,可以从字符串创建 PagingState 并添加页面大小以创建 PageRequest。有点棘手且没有记录,但有效。请记住检查下一页是否存在以及 Pageable 是否真的是 CassandraPageRequest。示例代码如下:
// Serialize pageabele
if (isNull(pageable) || pageable.isUnpaged() || !(pageable instanceof
CassandraPageRequest)) {
return null;
}
final CassandraPageRequest cassandraPageRequest = ((CassandraPageRequest)
pageable);
if (isNull(cassandraPageRequest.getPagingState())) {
return null;
}
return cassandraPageRequest.getPagingState().toString();
// Create request from serialized object
CassandraPageRequest.of(PageRequest.of(0, pageSize),
PagingState.fromString(serializedPagingState));
这也是 SpringData Jira 上的问题。 https://jira.spring.io/browse/DATACASS-565#add-comment