通过Spring Boot重用Hibernate-Validator中的域模型

时间:2018-11-09 00:54:48

标签: java validation spring-boot hibernate-validator

我正在使用Hibernate Validator(包含在Spring-boot-starter-web中)学习SpringBoot,我想知道如何在不同情况下重用同一域

  

User.java

public class User {

    @NotBlank(message = "username could not be empty ")
    private String name;

    @Max(120)
    private int age;

    @Range(min = 8, max = 20)
    private String password;

    @Email
    private String email;
}

情况是:

我想使用该域模型来执行登录和注册,也许还有其他事情,但是遇到了一些麻烦。

  1. 在注册时,我需要验证所有属性,例如(姓名,年龄,电子邮件,密码)
  2. 但是在登录状态下,我只需要验证名称和密码即可。

是否可以仅使用同一域来执行此操作?以及如何做到?

谢谢。

1 个答案:

答案 0 :(得分:0)

您要查看的是validation groups。这样,您可以为同一个bean构建约束集,然后在不同情况下使用不同的组进行验证。在您的特定情况下,您可能会遇到类似这样的情况:

公共类用户{

@NotBlank(message = "username could not be empty ", groups = {Register.class})
private String name;

@Range(min = 8, max = 20, groups = {Register.class, Login.class})
private String password;

@Email(groups = {Register.class, Login.class})
private String email;

}

,然后通过将RegisterLogin作为一个组传递以进行验证,您将只对具有相应组的约束进行检查。

如何在春季通过这些团体?您应该看看@Validated annotation。它具有属性groups,可用于指定要用于验证的组。看起来像这样:

@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@Validated( Login.class ) User user) {
    ....
}