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

Spring Boot响应式方法加自定义注解后返回空白200状态问题

问题原因及解决方案

核心问题

你的切面方法validationProcessror返回类型是void,但在Reactive(WebFlux)场景下,@Around切面必须返回目标方法的响应流(即Mono/Publisher类型)。

当你调用method.proceed()时,虽然能拿到Mono对象并手动订阅打印数据,但因为切面没有把这个Mono返回给Spring WebFlux框架,框架无法订阅该流来生成HTTP响应,最终返回空白的200状态码。

修复步骤

修改切面方法的返回类型和返回逻辑:

@Around(value = "@annotation(ValidateParam)")
public Object validationProcessror(ProceedingJoinPoint method, ValidateParam validateParam) throws Throwable {
    Object arg = method.getArgs()[0];
    Class validatorclass = validateParam.name();
    ValidationError err = applyValidation((Validator) validatorclass.getConstructor().newInstance(), arg);
    
    if (err.size() == 0) {
        // 必须返回proceed()的结果,让WebFlux处理这个Mono
        return method.proceed();
    } else {
        // 用Mono.error包装异常,更符合Reactive编程规范
        return Mono.error(new RuntimeException(err.errors.toString()));
    }
}

补充说明

  • 在WebFlux中,所有控制器的响应流(Mono/Flux)都需要被框架订阅才能生成响应,切面作为拦截器,必须传递这个流,而不是消费后丢弃。
  • 用Mono.error()包装异常,能让WebFlux正确转换为对应的错误HTTP状态码(默认500),比直接抛出异常更符合Reactive的错误处理模式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:42:26