如果一个方法中有参数被 @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();
}
转自:http://blog.csdn.net/lougnib/article/details/9973257
错误消息将会是: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();
}
转自:http://blog.csdn.net/lougnib/article/details/9973257