使用相同实体类

时间:2017-08-18 03:08:04

标签: spring spring-mvc spring-boot spring-data-jpa

我有一个用户实体类,它由我的数据库中的表映射。在该课程中,有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;

    ...
}

此类表示整个项目源代码中的用户。

但问题是注册过程:

  1. 客户以注册形式
  2. 传递密码
  3. Controller使用@Valid
  4. 验证用户密码
  5. 通过加密算法对服务编码密码。
  6. 服务尝试通过调用存储库save()
  7. 来保存用户
  8. 然后在将其保存到数据库之前,再次进行验证
  9. 用户现已保存到数据库中
  10. 有两个验证过程,一个表单验证和一个实体验证。

    但他们应该有不同的验证策略。

    我已经实现了两个带有相关约束注释的不同验证器。

    最简单的方法是什么?

1 个答案:

答案 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。