繁体   English   中英

在 Spring MVC 中使用 @valid(JSR-303) 验证时不显示错误消息

[英]Not showing error messages when validated using @valid(JSR-303) in Spring MVC

我在 dispatcher-servlet 中指定了<mvc:annotation-driven /> 我没有使用@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' 对象 'article' 中的字段错误:拒绝值 []; 代码 [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: Unable to convert value from type 'java.lang.String' to type 'java.net.URL'; 嵌套异常是 org.springframework.core.convert.ConversionFailedException: Unable to convert value from type 'java.lang.String' to type 'java.net.URL'; 嵌套异常是 java.lang.reflect.InvocationTargetException] 字段 'title' 上的对象 'article' 中的字段错误:拒绝值 []; 代码 [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]; 默认消息 [大小必须介于 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)

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

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

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

@RequestMapping(method = RequestMethod.POST, value = "new") 
public String save(@Valid Article article, BindingResult result, ModelMap model) { 
    if (result.hasErrors())
        return "formView";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM