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

处理方法存在BindingResult参数时@ExceptionHandler方法不生效问题

现象原因

这是Spring MVC参数校验的默认处理规则直接决定的:

  • 当@Valid注解修饰的请求参数后紧跟着声明BindingResult类型参数时,Spring框架会把校验产生的所有错误结果自动注入到这个BindingResult实例中,不会抛出MethodArgumentNotValidException异常。全局异常处理器自然捕获不到对应异常,所以打印逻辑不会执行。这种场景下需要你主动在Controller方法中调用bindingResult.hasErrors()判断是否存在校验错误,自行处理错误逻辑。
  • 当你移除BindingResult参数后,校验失败时Spring没有可以存储错误结果的载体,会直接抛出MethodArgumentNotValidException异常,被你定义的全局异常处理器捕获后,就会执行对应的打印逻辑。

保留BindingResult的正确写法示例

如果需要在Controller层自行处理校验错误,可以参考如下代码:

@PostMapping("userdata")
public void validdata(@Valid @RequestBody User user, BindingResult bindingResult) {
    // 主动判断是否存在校验错误
    if (bindingResult.hasErrors()) {
        System.out.println("Invalid Input!");
        // 也可以收集具体错误信息返回给前端
        return;
    }
    // 校验通过后执行正常业务逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:24:00