Spring启动仅使用表单中的@valid验证特定属性

时间:2017-07-27 13:41:04

标签: java spring-mvc spring-boot

在我的春季启动应用程序中。我有用户类:

public class User {

   private Long id;

   @NotEmpty(message="Field is required.")
   @Size(max=50, message="Field cannot exceed 50 characters in length.")
   private String username;

   @NotEmpty(message="Field is required.")
   @Size(max=50, message="Field cannot exceed 50 characters in length.")
   private String name;

   @NotEmpty(message="Field is required.")
   @Email(message="Please enter valid email address.")
   private String email;

   .... getter and setter here....
}

我创建了用户注册表单,用于验证姓名,用户名和电子邮件。

像这样:

@RequestMapping(value="/user/register", method= RequestMethod.GET)
public String createUserForm(User user){
    return "user/create";
} 

@RequestMapping(value="/user/register", method= RequestMethod.POST)
public String createUser(@Valid User user, BindingResult bindingResult){

    if (bindingResult.hasErrors()) {
        return "users/create";
    }
    //Here code to save user
    return "users/createdSuccess";

}

现在我想为用户创建忘记密码页面。忘记密码页面只包含电子邮件地址。但是如果我使用验证用户模型,它总是会出错,因为有名称和用户名属性的添加。

如何忽略忘记密码页面的名称和用户名注释,并仅验证电子邮件地址。

@RequestMapping(value="/account/forgot", method= RequestMethod.GET)
public String forgotPassForm(User user){
    return "users/forgotPassword";
}

@RequestMapping(value="/account/forgot", method= RequestMethod.POST)
public String resetPass(@Valid  User user, BindingResult bindingResult){

    if (bindingResult.hasErrors()) {
        return "users/forgotPassword";
    }

    return "users/passwordEmailSent";

}

2 个答案:

答案 0 :(得分:1)

您应该将@ Validated-annotation与提供的验证组和适当的验证器一起使用。在这里你看到这样的例子: http://www.journaldev.com/2668/spring-validation-example-mvc-validator

答案 1 :(得分:0)

不知道我是否理解你,但我有类似的问题,用户更新其凭据,当然有可能, 密码 -field为空(如果用户不想(重新)设置它)。所以我只是检查密码字段是否为空(它可能是一个"脏"解决方案,但在我的情况下它有效(我还在html上做了表单验证)侧)):

if (bindingResult.hasErrors()) {
     // ignore field password
     if (!bindingResult.hasFieldErrors("password")) {
          // do something
     }
}