如果 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");
}
在反应式 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");
}