我在dispatcher-servlet中指定了<mvc:annotation-driven />
。
我没有使用@InitBinder
我在控制器的方法中使用@valid annotation进行验证,如
@RequestMapping(method = RequestMethod.POST, value = "new")
public String save(@Valid Article article,ModelMap model) {
//code here
}
验证工作正常,但不是显示错误.. 示例以html代码显示
<tr>
<td>Title</td>
<td><form:input path="title"/></td>
<td><form:errors path="title"/></td>
</tr>
它抛出异常,如..
org.springframework.web.util.NestedServletException: 请求处理失败;嵌套 例外是 org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 2个错误对象中的字段错误 字段'urlInfo.url'上的'文章': 拒绝价值[];代码 [typeMismatch.article.urlInfo.url,typeMismatch.urlInfo.url,typeMismatch.url,typeMismatch.java.net.URL,typeMismatch]; 参数 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码 [article.urlInfo.url,urlInfo.url]; 参数[];默认消息 [urlInfo.url]];默认消息 [无法转换属性值 输入'java.lang.String'到必需的 输入'java.net.URL'作为属性 'urlInfo.url';嵌套异常是 org.springframework.core.convert.ConversionFailedException: 无法从类型转换值 输入'java.lang.String' '的java.net.URL';嵌套异常是 org.springframework.core.convert.ConversionFailedException: 无法从类型转换值 输入'java.lang.String' '的java.net.URL';嵌套异常是 java.lang.reflect.InvocationTargetException] 对象'文章'中的字段错误 字段'title':被拒绝的值[]; 代码 [Size.article.title,Size.title,Size.java.lang.String,尺寸]; 参数 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码[article.title,title];参数 [];默认消息 [标题],{javax.validation.constraints.Size.message},6,[Ljava.lang.Class; @ 1db3aac,2147483647,[Ljava.lang.Class; @ 1e90abf]; 默认消息[大小必须介于两者之间 6和2147483647]
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:659)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:213)
org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:171)
org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
如何配置它,不抛出异常而是返回页面并显示错误消息......
答案 0 :(得分:18)
在控制器处理程序方法中,确保BindingResult参数紧跟在命令参数之后。
答案 1 :(得分:16)
您应该明确决定如何处理验证错误:
@RequestMapping(method = RequestMethod.POST, value = "new")
public String save(@Valid Article article, BindingResult result, ModelMap model) {
if (result.hasErrors())
return "formView";