我有一个用户实体类,它由我的数据库中的表映射。在该课程中,有password
字段,如:
@Data
@Entity
@Table(name = "users", schema = "...")
public class UserEntity {
...
@Column(name = "password", nullable = false, length = 64)
@NotNull
@Size(min = 8, max = 64)
private String password;
...
}
此类表示整个项目源代码中的用户。
但问题是注册过程:
@Valid
save()
有两个验证过程,一个表单验证和一个实体验证。
但他们应该有不同的验证策略。
我已经实现了两个带有相关约束注释的不同验证器。
最简单的方法是什么?
答案 0 :(得分:1)
Hibernate验证(Bean验证的RI)允许validation groups
以下示例验证Car对象
中的所有字段UserEntity user = ...
Set<ConstraintViolation<Car>> constraintViolations = validator.validate(user);
但是,如果我想在第一步中验证某些字段并在第二步中验证其他字段,该怎么办?这是Validation Groups
进入行动的地方
constraintViolations = validator.validate(user, Step1.class);
constraintViolations = validator.validate(user, Step2.class);
现在,您的UserEntity
应该被修改
@Column(name = "password", nullable = false, length = 64)
@NotNull(groups = Step1.class)
@Size(min = 8, max = 64, groups = Step2.class)
private String password;
因此,在第一步中,密码将被验证为非空,同时在步骤2中,验证将是尺寸的最小值为8,最大值为64。