You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Mono<Response>转为Mono<RequestID>并构建Mono<ResponseEntity>

解决方案

1. 转换Mono<Response>为Mono<RequestID>

修改sendFile方法,利用Reactor的map操作符从Response对象中提取RequestID,同时修正方法的返回值类型:

public Mono<RequestID> sendFile(final MultipartFile multipartFile) {
    // 确保multiValueMap已正确构建,包含上传文件的内容
    Mono<Response> responseMono = webClient.post()
                .uri("someurl") // 直接传入字符串即可,WebClient会自动处理URI转换
                .body(BodyInserters.fromMultipartData(multiValueMap))
                .retrieve()
                .bodyToMono(Response.class);

    // 通过map操作符完成响应对象的转换
    return responseMono.map(Response::getRequestID);
}

2. 控制器中构建响应式Mono<ResponseEntity>

控制器中不能直接从Mono<RequestID>同步取值(违反响应式非阻塞原则),需通过响应式操作符链式处理:

@PostMapping("/request")
public Mono<ResponseEntity<Response2<String>>> sendRequest(@RequestPart(value = "file") final MultipartFile multipartFile) {
    return service.sendFile(multipartFile)
            // 将RequestID转换为自定义Response2对象
            .map(requestID -> new Response2<>(requestID.getRequestID(), true, "SUCCESS"))
            // 包装为ResponseEntity并指定HTTP状态码
            .map(response2 -> ResponseEntity.status(HttpStatus.CREATED).body(response2));
}

关键注意点

  • 响应式类型(如Mono)的值是异步发射的,禁止直接调用request.getRequestID()这类同步方法,必须通过map/flatMap等操作符处理异步流。
  • 确保Response类提供getRequestID() getter方法,RequestID类提供getRequestID() getter方法,否则无法完成映射逻辑。

内容的提问来源于stack exchange,提问作者user21476047

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:34:54