14

我已经 <mvc:annotation-driven />在 dispatcher-servlet 中指定了。我没有使用@InitBinder。
我正在使用@valid 注释在控制器的方法中进行验证,例如

@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”的属性值转换为属性“urlInfo.url”所需的类型“java.net.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] 字段“标题”上的对象“文章”中的字段错误:拒绝值 [];代码 [Size.article.title,Size.title,Size.java.lang.String,Size]; 参数 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码 [article.title,title]; 论据 []; 默认消息 [title],{javax.validation.constraints.Size.message},6,[Ljava.lang.Class;@1db3aac,2147483647,[Ljava.lang.Class;@1e90abf];

 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)

如何配置它,不抛出异常,而是返回页面并显示错误消息......

4

2 回答 2

18

在您的控制器处理程序方法中,确保 BindingResult 参数紧跟在命令参数之后。

于 2012-05-02T12:53:10.507 回答
16

您应该明确决定如何处理验证错误:

@RequestMapping(method = RequestMethod.POST, value = "new") 
public String save(@Valid Article article, BindingResult result, ModelMap model) { 
    if (result.hasErrors())
        return "formView";
于 2010-01-16T15:24:18.593 回答