Spring 同一实体类的JPA保存和表单验证的不同验证过程
我有一个用户实体类,它由数据库中的表映射。在该类中,有密码字段,如:Spring 同一实体类的JPA保存和表单验证的不同验证过程,spring,spring-mvc,spring-boot,spring-data-jpa,Spring,Spring Mvc,Spring Boot,Spring Data Jpa,我有一个用户实体类,它由数据库中的表映射。在该类中,有密码字段,如: @Data @Entity @Table(name = "users", schema = "...") public class UserEntity { ... @Column(name = "password", nullable = false, length = 64) @NotNull @Size(min = 8, max = 64) private String pas
@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来保存用户
然后,在将其保存到数据库之前,再次进行验证
用户现在保存到数据库中
有两个验证过程,一个表单验证和一个实体验证
但他们应该有不同的验证策略
我已经用相关的约束注释实现了两个不同的验证器
最简单的方法是什么?Hibernate Validation RI for Bean Validation allow Validation Group 下面的示例验证Car对象中的所有字段
UserEntity user = ...
Set<ConstraintViolation<Car>> constraintViolations = validator.validate(user);
现在,您的UserEntity应该被修改
@Column(name = "password", nullable = false, length = 64)
@NotNull(groups = Step1.class)
@Size(min = 8, max = 64, groups = Step2.class)
private String password;
因此,在第一步中,密码将被验证为不为null,同时在第2步中,验证大小的最小值为8,最大值为64
@Column(name = "password", nullable = false, length = 64)
@NotNull(groups = Step1.class)
@Size(min = 8, max = 64, groups = Step2.class)
private String password;