【问题标题】:Request processing failed; nested exception is javax.validation.ConstraintViolationException: Validation failed for classes请求处理失败;嵌套异常是 javax.validation.ConstraintViolationException:类的验证失败
【发布时间】:2018-01-06 17:46:13
【问题描述】:

我收到以下验证异常。我之前在同一个问题上探索了一些答案,但对我没有任何帮助。

org.springframework.web.util.NestedServletException: 请求 处理失败;嵌套异常是 javax.validation.ConstraintViolationException:验证失败 在组的持续时间内类 [com.rg.spring.model.User] [javax.validation.groups.Default, ] 约束违规列表:[ ConstraintViolationImpl{interpolatedMessage='不能为空', propertyPath=fname, rootBeanClass=class com.rg.spring.model.User, messageTemplate='{org.hibernate.validator.constraints.NotEmpty.message}'} ] org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)

在我的模型中

@NotEmpty
@Column(name = "fname", nullable = false)
String fname;

我有控制器

@RequestMapping(value = { "/new" }, method = RequestMethod.POST)
public String saveUser(@Valid User user, BindingResult result, ModelMap model) {
        if (result.hasErrors()) {
            return "registration";
        }
        service.saveUser(user);
        model.addAttribute("success", "User " + user.getFname() + " registered successfully");
        return "success";
    }

我有以下messages.properties

NotEmpty.user.fname = First Name is required!

在 pom 中添加以下依赖项

<!-- jsr303 validation -->
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.1.3.Final</version>
</dependency>

以下是 UI 表单

<form:form method="POST" modelAttribute="user">
    <form:input type="hidden" path="id" id="id"/>
    <table>
        <tr>
            <td><label for="fname">First Name: </label> </td>
            <td><form:input path="fname" id="fname"/></td>
            <td><form:errors path="fname" cssClass="error"/></td>
        </tr>

我有以下方法在 AppConfig 下加载消息

@Bean
public MessageSource messageSource() {
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasename("messages");
    return messageSource;
}

【问题讨论】:

    标签: java validation spring-mvc spring-validator nhibernate-validator


    【解决方案1】:

    控制器类:

    @RequestMapping(value = { "/new" }, method = RequestMethod.POST)
    public String saveUser(@Valid @ModelAttribute("user") User user, BindingResult result,
            ModelMap model) {
    
        if (result.hasErrors()) {
            return "registration";
        }
        service.saveUser(user);
        model.addAttribute("success", "User " + user.getFname() + " registered successfully");
        return "success";
    }
    

    在你的控制器类中添加这个方法。此方法删除空格。

    @InitBinder
    public void InitBinder(WebDataBinder dataBinder) {
        StringTrimmerEditor stringTrimmerEditor = new StringTrimmerEditor(true);
        dataBinder.registerCustomEditor(String.class, stringTrimmerEditor);
    }
    

    我希望,这会奏效。

    【讨论】:

      猜你喜欢
      • 2018-05-11
      • 2013-05-06
      • 2021-12-21
      • 2020-08-28
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多