Как сделать заголовок в ResponseEntity условно, если поток пуст - PullRequest
0 голосов
/ 12 марта 2019

В реактивном контроллере с пружинной загрузкой, учитывая следующий метод (kotlin)

fun rows(): ResponseEntity<Flux<ResultRow>> {
    val elements: Flux<ResultRow> = service.fetchRows() // not shown

    return ResponseEntity
        .ok()
        .header(
            ResultRowPagination.NEXT_PAGE_HEADER, "value")
        )
        .body(elements)
}

Есть ли способ вообще не устанавливать ResultRowPagination.NEXT_PAGE_HEADER, если поток пуст (A) или содержитменее 10 пунктов (B)?

1 Ответ

1 голос
/ 12 марта 2019

Вы должны собрать список из вашего Flux, если хотите сравнить его размер с 10.

Может быть, это может помочь вам:

Mono<ResponseEntity<List<ResultRow>>> rows() {
    Flux<ResultRow> elements = ...;

    return elements
            .collectList()
            .map(resultRows -> prepareHeaders(resultRows)
                    .body(resultRows))
            .switchIfEmpty(Mono.just(ResponseEntity.ok()
                    .build()));
}

ResponseEntity.BodyBuilder prepareHeaders(List<ResultRow> resultRows) {
    if (resultRows.isEmpty() || resultRows.size() < 10)
        return ResponseEntity.ok();
    return ResponseEntity.ok()
            .header(ResultRowPagination.NEXT_PAGE_HEADER, "value");
}
...