Использование requestContinuation для разбивки на страницы в Spring-Data-CosmosDB - PullRequest
0 голосов
/ 07 февраля 2020

Я использую spring-data-cosmosdb 2.2.2 с azure -cosmos 3.6.0 и Scala.

Я использую CosmosTemplate для создания пользовательских DocumentQueries с использованием сортировки и разбивки на страницы.

Моя проблема состоит в том, чтобы перемещаться по страницам в моем запросе, используя requestContinuation. Каждый запрос (POST) возвращает requestContinuation следующим образом:

"requestContinuation": "{\" композитный токен \ ": \" {\\ "token \\": null, \\ "range \\" : \\ "{\\\\" \\\\ мин ": \\\\" 05C1DFFFFFFFFC \\\\ "\\\\ "\\\\ макс": \\\\" FF \\\ \ "\\\\ "\\\\ isMinInclusive": правда, \\\\ "isMaxInclusive \\\\" ложь} \\ "} \", \ "orderByItems \": [{\" пункт \ ": \" 8b90e589-09d8-42e7-a3e2-d26cf2c38a63 \ "\ "Карта \": {\ "пункт \": \ "8b90e589-09d8-42e7-a3e2-d26cf2c38a63 \"}}], \" избавиться \ ": \" I9lLALNXyUNECgEAAAAACA == \ ", \" inclusive \ ": true}"

Первое, что я увидел, это то, что внутренний "токен" всегда пуст.

Я пытался скопировать всю строку и поместил ее в мой запрос в качестве параметра, но он не работал: POST https://baseurl/api/documents/recent?page=1&requestContinuation= ...

RequestContinuation никогда не изменяется, а документы, возвращаемые на странице, всегда то же. Я использую Почтальон и Бессонницу.

Я не нахожу хороших примеров использования requestContinuation. Я что-то пропустил? Может быть, кодирование токена с base64?

Я не знаю, в чем проблема - просто передать requestContinuation или что-то не так в моем коде.

В резюме я просто использую paginationQuery метод для выполнения documentQuery с некоторыми критериями и объектом «pageable».

Мой контроллер:

@RestController
@RequestMapping(path = Array("/api"))
class DocumentController(@Autowired private val service: DocumentService) extends BaseController {

  @PostMapping(path = Array("/documents/recent"), produces = Array("application/json"))
  def findRecentDocuments(pageable: Pageable,
                          @RequestBody params: DocumentParams,
                          @RequestHeader(name="apiKey") token: String
                   ): Page[Document] = {

    service.findRecentDocuments(pageable, Option(params))
  }

Мой сервис:

class DocumentService(@Autowired private val documentRepository: DocumentRepository, @Autowired private val template: CosmosTemplate) extends BaseService {
  def findRecentDocuments(pageable: Pageable, params: Option[DocumentParams]): Page[Document] = {     

      val documentClass = classOf[Document]
      val collectionName = template.getCollectionName(documentClass)
      val defaultSort = Sort.by(Direction.ASC, "id")
      val sort = pageable.getSortOr(defaultSort)
      val criteria = QueryUtils.getCriteria(params, documentClass)

      getCriteriaInfo(criteria)
      documentRepository.findRecentDocuments(pageable, criteria, sort, documentClass, collectionName)
  }

Мой репозиторий:

    class DocumentRepository(@Autowired private val template: CosmosTemplate) {

  def findRecentDocuments(pageable: Pageable, criteria: Criteria, sort: Sort, documentClass: Class[Document], collectionName: String): Page[Document] = {
    val query = new DocumentQuery(criteria)

    template.paginationQuery(query.`with`(sort).`with`(pageable), documentClass, collectionName)
  }
}

Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

Как я уже прокомментировал в исходном выпуске MS Github, я нашел решение, меняющее объект «Pageable» на объект «CosmosPageRequest», который использует requestContinuation. Это сработало для меня.

Вот код: https://github.com/microsoft/spring-data-cosmosdb/issues/484

Спасибо.

0 голосов
/ 07 февраля 2020

Вы пробовали рекомендованный способ разбиения на страницы, предоставленный в разделе readme для spring-data-cosmosdb: https://github.com/microsoft/spring-data-cosmosdb/blob/master/README.md Раздел: Поддерживает Spring Data с возможностью просмотра страниц и сортировки.

Также задокументировано здесь : https://docs.microsoft.com/en-us/azure/java/spring-framework/how-to-guides-spring-data-cosmosdb#pagination -и-сортировка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...