如果一个方法中有参数被 @Valid 标注了,但该参数后面没有紧跟一个 BindingResult 类型的参数,那么提交到该方法时,将返回 400 错误。
错误消息将会是:The request sent by the client was syntactically incorrect ().
错误的方法定义 1 :(错误原因:没有 BindingResult 参数)
@RequestMapping({"error400"
}) public
String error400(@Valid
@ModelAttribute("testForm") TestForm testForm) { return"test";
} |
错误的方法定义 2 :(错误原因:没有紧跟在 @Valid 参数之后)
@RequestMapping({"error400"
}) public
String error400(@Valid
@ModelAttribute("testForm") TestForm testForm, Model model, Errors result) { return"demo/front/test";
} |
也可参考 DefaultHandlerExceptionResolver.java 中的方法说明:
/**
* Handle the case where an {@linkplain ModelAttribute @ModelAttribute} method * argument has binding or validation errors and is not followed by another * method argument of type {@link BindingResult}. * By default an HTTP 400 error is sent back to the client. * @param request current HTTP request * @param response current HTTP response * @param handler the executed handler * @return an empty ModelAndView indicating the exception was handled * @throws IOException potentially thrown from response.sendError() */protectedModelAndView handleBindException(BindException ex, HttpServletRequest request, HttpServletResponse response, Object handler)throws
IOException { response.sendError(HttpServletResponse.SC_BAD_REQUEST); returnnew
ModelAndView(); } |
本文深入探讨了Spring MVC中@Valid注解的应用及其与BindingResult参数之间的关系,解释了当参数未紧跟BindingResult类型参数时,会引发400错误的原因,并引用了DefaultHandlerExceptionResolver.java中的方法说明来辅助理解。
2376

被折叠的 条评论
为什么被折叠?



