【发布时间】:2014-07-11 07:25:24
【问题描述】:
我有表格:
<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>
Action = /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、@Range、@Min、@Max 注释(其中任何一个)时,例如,我使用一个符号(大小)在页面上填写用户名和电子邮件输入,长度,最小注释必须验证输入中的符号计数)并按下提交按钮 - 在调试日志中我看到 bindingresult 包含错误,但我的控制器方法 registerUser 没有调用 - 而不是这个我得到 HttpError 502 BadGateway 和空白页 -我的控制器的方法没有调用。
怎么了?
更新: 我确实没有 502 BadGateway,我在控制器中有一个异常,因为 FieldErrors at Length 注释。
【问题讨论】:
-
如果你使用表单,为什么在你的控制器方法中你有
headers = "Accept=application/json",为什么你在UserDto userDto之前没有@ModelAttribute?并且 BindingResul 参数应该紧跟在它之后,而不是在请求参数之后。 -
首先,如果我使用
@Valid,我不能使用@ModelAttribute。然后,作为答案发布BindingResult必须紧跟在@Valid之后,而不是在请求参数之后 - 这就是答案!一切正常!谢谢!
标签: java spring validation spring-mvc