Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 同一实体类的JPA保存和表单验证的不同验证过程_Spring_Spring Mvc_Spring Boot_Spring Data Jpa - Fatal编程技术网

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;