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

WebFlux控制器中返回对象前是否需要用Mono包装?

WebFlux异常处理方法返回值:Map vs Mono

结论先行

两种写法都是合法且有效的,不存在“不正确”的问题。

详细说明

WebFlux框架本身支持在@ExceptionHandler方法中直接返回同步的非反应式类型(比如你代码里的Map<String, Object>),框架会自动通过ReactiveAdapterRegistry将其包装为Mono类型,最终的响应输出和用Mono.just(map)返回的结果完全一致。

两种写法的适用场景

  • 直接返回Map:适合纯同步、无异步逻辑的简单场景,代码更简洁直观,不需要额外的反应式包装。
  • 返回Mono:如果后续需要扩展异步操作(比如从数据库查询错误详情、调用远程服务获取配置等),这种写法更贴合Reactive编程的风格,也能无缝兼容后续的异步逻辑变更。

代码示例

写法一:直接返回Map

@ExceptionHandler
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Map<String, Object> nullInfoSent(NullPointerException e) {
    Map<String, Object> map = new HashMap<>();
    map.put("error", "Error occurred.");
    return map;
}

写法二:返回Mono

@ExceptionHandler
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Mono<Map<String, Object>> nullInfoSent(NullPointerException e) {
    Map<String, Object> map = new HashMap<>();
    map.put("error", "Error occurred.");
    return Mono.just(map);
}

内容的提问来源于stack exchange,提问作者Krusty the Clown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:06:26