【发布时间】:2010-12-10 08:12:10
【问题描述】:
我想知道,我是否忽略了某些东西,或者休眠验证器没有提供注释来验证 2 个字段是否相等(例如密码)。 我知道我可以编写自己的验证器,但这似乎是标准功能。
【问题讨论】:
标签: bean-validation hibernate-validator javax.validation
我想知道,我是否忽略了某些东西,或者休眠验证器没有提供注释来验证 2 个字段是否相等(例如密码)。 我知道我可以编写自己的验证器,但这似乎是标准功能。
【问题讨论】:
标签: bean-validation hibernate-validator javax.validation
如果您使用的是 Spring 框架,那么您可以使用 Spring 表达式语言 (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;
}
【讨论】:
刚刚选择了自定义验证器路线。这里的其他2个答案与这个问题并没有真正的关系。 通过谷歌搜索,我找到了一个 fieldmatch 示例。
【讨论】:
Hibernate 是一个 ORM 映射器。
它用于将数据持久化到数据库中并再次提取。因此,拥有两个具有相同值的字段没有多大意义(从持久性的角度来看)。那是你应该检查你的业务逻辑的东西。
我和 Junesh 在一起...不要以可检索的格式保留您的密码...查找 Hasing 和 Salting - 或者更好的是,考虑 openID,这样您就不必再用另一个愚蠢的密码来打扰您的客户了.. .
【讨论】:
我希望您也不要将确认密码保存在数据库中。您没有任何开箱即用的验证,但您必须使用自定义注释,这也非常简单。
【讨论】: