Я использую 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)
}
}
Спасибо за любую помощь.