hibernate验证器:验证2个字段匹配

时间:2010-12-10 08:12:11

标签: hibernate bean-validation hibernate-validator

我想知道,我是否忽略了某些内容,或者hibernate验证器没有提供注释来验证2个字段是否相等(例如密码)。 我知道我可以编写自己的验证器,但这似乎是标准功能。

5 个答案:

答案 0 :(得分:3)

如果您正在使用Spring Framework,那么您可以使用Spring Expression Language(SpEL)。我编写了一个小型库,它提供了基于SpEL的JSR-303验证器,使得跨场验证变得非常容易。看看https://github.com/jirutka/validator-spring

当至少其中一个密码字段不为空时,这将验证密码字段是否相等。

@SpELAssert(value = "password.equals(passwordVerify)",
            applyIf = "password || passwordVerify",
            message = "{validator.passwords_not_same}")
public class User {

    private String password;
    private String passwordVerify;
}

答案 1 :(得分:2)

一个很好的例子,解决了类似的问题,即跨领域验证:

Cross field validation with Hibernate Validator (JSR 303)

答案 2 :(得分:0)

刚去了自定义验证器路线。这里的其他2个答案与问题没有关系。 通过一些谷歌搜索,我找到了一个fieldmatch示例。

答案 3 :(得分:-1)

Hibernate是一个ORM Mapper。

用于将数据保存到数据库中并再次提取。因此,具有相同值的2个字段没有多大意义(从持久性的观点来看)。这是你应该在你的业务逻辑中检查的东西。

我和Junesh在一起......不要以可检索的格式保存你的密码...查看Hasing和Salting - 或者甚至更好,考虑一下openID,这样你就不必用另一个愚蠢的密码打扰你的客户了..

答案 4 :(得分:-2)

我希望你也不要在数据库中保存确认密码。你没有任何开箱即用的验证,但你必须使用非常直接的自定义注释。