如果 Flux 为空,我如何有条件地 header 到 ResponseEntity

How do I header to a ResponseEntity conditionally if a Flux is empty

在反应式 spring-boot 控制器中,给定以下方法 (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)
}

如果 Flux 为空 (A) 或包含少于 10 个项目 (B),是否有办法完全不设置 ResultRowPagination.NEXT_PAGE_HEADER

如果你想将它的大小与 10 进行比较,你应该从你的 Flux 中收集列表。

也许这对你有帮助:

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");
}