我有表格:
<form:form id="my-registration-form" method="post" commandName="userDTO" modelAttribute="userDTO" action="/index/register.do">
<p class="error">
<form:errors path="*" cssClass="errorblock" element="div" />
</p>
<p>
<form:input path="username" />
<form:errors path="username" cssClass="error" />
<%--<input type="text" id="username" name="username" placeholder="Username" value="">--%>
</p>
<p>
<form:input path="email" />
<form:errors path="email" cssClass="error" />
<%--<input type="text" id="email" name="email" placeholder="Email" value="">--%>
</p>
<p class="submit">
<input type="submit" class="button" value="Register">
</p>
</form:form>
动作= /index/register.do
@RequestMapping(value = "/register.do", headers = "Accept=application/json", method = RequestMethod.POST)
public String registerUser(@Valid UserDTO userDTO, HttpServletRequest request,
BindingResult result, RedirectAttributes attributes) {
if (result.hasErrors()) {
return "error"
}
}
我的模特UserDTO:
public class UserDTO {
private String uuid;
@NotEmpty(message = "This field req")
@Length(min = 6, max = 30, message = "6 or 30")
protected String username;
protected String password;
@NotEmpty(message = "Email required")
@Email(message = "Enter good email")
protected String email;
}
所以我的问题是:当我离开@NotEmpty注释时 - 在页面上我按下带有空输入的提交按钮 - 一切正常,我的控制器方法registerUser被调用,看到错误并正常工作。但是当我在任何字段的UserDTO类中添加@ Email,@ Size,@ Length,@ Land,@ Min,@ Max注释(其中任何一个)时,例如我在页面上使用一个符号填充用户名和电子邮件输入(大小) ,长度,最小注释必须验证输入中的符号计数)并按下提交按钮 - 在调试日志中我看到bindingresult包含错误,但我的控制器方法registerUser没有调用 - 而不是这个我得到了HttpError 502 BadGateway和空白页 - 我的控制器的方法没有调用。
怎么了?
更新 我确实没有502 BadGateway,我在Controller中有一个异常,因为在Length注释中有FieldErrors。
答案 0 :(得分:5)
在Spring参考手册中明确指出,在MVC控制器的RequestMapping
注释方法中,BindingResult
参数必须紧跟其引用的参数。
在你的情况下你应该写:
public String registerUser(@Valid UserDTO userDTO, BindingResult result,
HttpServletRequest request, RedirectAttributes attributes) {
答案 1 :(得分:1)
BindingResult result 方法参数必须紧跟在方法参数列表中的表单bean之后。