如果助焊剂为空,我如何有条件地标头到ResponseEntity

时间:2019-03-12 13:42:35

标签: spring-boot spring-webflux

在反应式弹簧启动控制器中,给出以下方法(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)
}

如果通量为空(A)或包含少于10个项目(B),是否可以完全不设置ResultRowPagination.NEXT_PAGE_HEADER

1 个答案:

答案 0 :(得分:1)

如果您希望将Flux的大小与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");
}