Сериализация CassandraPageRequest

Я использую spring-data-cassandra в своем проекте и хочу предоставить функциональность, подобную разбивке на страницы (без произвольного доступа, без выбора конкретной страницы - просто выборка вперед). Я могу добиться этого эффекта с помощью метода, описанного в этом PR:

https://github.com/spring-projects/spring-data-cassandra/pull/114

Однако я хочу сериализовать объект Pageable, возвращаемый функцией Slice.nextPageable(), чтобы предоставить эту функциональность через интерфейс REST. Это возможно?


person ŁukaszG    schedule 12.06.2018    source источник
comment
Я не знаком с Spring, но ищу что-то вроде состояния пейджинга в документации. Я использую значение состояния пейджинга в своем проекте Python, чтобы раскрыть функциональность разбиения на страницы через REST.   -  person pkisztelinski    schedule 12.06.2018


Ответы (1)


Решение состоит в том, чтобы принудительно преобразовать объект 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

person ŁukaszG    schedule 13.06.2018