2017-09-14 124 views
0

我想作以下验证:春天启动的自定义字段验证

  • 在一封电子邮件中检查存在于数据库中。
  • 在数据库中存在检查用户名。
  • 检查密码确认是否正确输入。

我正在使用一个类进行验证。例如:

public class RegisterRequest { 

    @NotNull(message = "Please enter an email") 
    @Email(message = "Not a valid email") 
    @JsonProperty("email") 
    public String email; 

    @NotNull(message = "Please enter a name") 
    @JsonProperty("name") 
    public String name; 

    @NotNull(message = "Please enter a password") 
    @JsonProperty("password") 
    public String password; 

    @NotNull 
    @JsonProperty("password_confirmation") 
    public String passwordConfirmation; 
} 

直到目前为止,这一切都工作正常。
但现在我想建立在密码验证(检查2密码的匹配)。我只会使用这一次,所以我认为没有必要为此创建一个完整的注释。
如何在不使用注释的情况下做到这一点。

我发现,来关闭到我想要的是一个方法,使用@AssertTrue一个验证密码的解决方案:

@AssertTrue("Passwords don't match") 
public boolean checkPasswords() { 
    return this.password.equals(this.passwordConfirmation); 
} 

这工作,但它没有连接到一个领域,但它是一个全球性的错误。
所以我找不到Passwords don't match错误属于哪个字段。 有没有办法将checkPasswords验证链接到一个字段?

+1

https://www.mkyong.com/spring-mvc/spring-mvc-password-example/ – StanislavL

+1

@StanislavL此链接7岁,谈论旧的验证方式。请注意,作者将'bean-validation'标记和JSR-303注释放在一起。 –

回答

1

这可行,但它没有链接到一个字段,但它是一个全局错误。

是的,这是一个全局错误,因为您正在处理整个对象。

如何在不使用注释的情况下做到这一点。

我不知道这样的方法。你必须编写你自己的验证器才能实现。

+0

谢谢我写了我自己的:https://github.com/jwz104/validation这是一个完成很长的路,但基地在那里。 –

+0

几年前我也写了自己的:[FieldsMatchValidator](https://github.com/php-coder/mystamps/blob/581412f565c71ecc482da5542e7ff77fe6a91a7f/src/main/java/ru/mystamps/web/support/beanvalidation/FieldsMatchValidator .java)和[UniqueLoginValidator](https://github.com/php-coder/mystamps/blob/581412f565c71ecc482da5542e7ff77fe6a91a7f/src/main/java/ru/mystamps/web/support/beanvalidation/UniqueLoginValidator.java) –