好的。我有一个 Spring MVC Controller 方法,如下所示:

public String getInformationByGID(@ModelAttribute("geoInfoParam") @Valid GeoInfoParam geoInfoParam, Model model ,BindingResult result)

GeoInfoParam 类定义了许多带有@NotNull、@Size 注释验证的输入,我希望在提交表单时执行这些验证(因为我有带有 ModelAttribute 的 @Valid)。但是发生了什么,当我点击提交时,页面显示 400 错误并且没有在日志中显示任何其他信息。

最佳答案

我调试了执行流程,发现 org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.java(这是 HandlerAdapter 执行的一部分)。handleBindException 在没有 BindingResult 后跟 ModelAttribute 时调用,此方法设置响应为 400 代码.
我学到的教训是,如果您有一个用@Valid 注释的表单(ModelAttribute),请确保其后紧跟 BindingResult。
所以我改变了我的 Controller 方法签名如下:

public String getInformationByGID(@ModelAttribute("geoInfoParam") @Valid GeoInfoParam geoInfoParam, BindingResult result, Model model)

傻我。现在一切都很好。希望这可以帮助某人。

注意:我使用 Spring MVC 3.2.8 和 Hibernate 验证器 4.2.0 final

10-07 17:58