那用户注册的时候,判断用户输入的两次密码是否一致举例子:
1、创建注解类 PasswordEqual
@Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) @Constraint(validatedBy = PasswordValidator.class) public @interface PasswordEqual { // 注意在注解中只能使用基本类型不能使用包装类型 int min() default 1; int max() default 10; String message() default "两次密码不一致"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; // 关联类 }
说明:min() 和 max() 是用来接收该注解传入的参数
2、创建 关联类,用于编写业务逻辑
/** * 自定义注解 @PasswordEqual 的关联类, 用于校验两次输入的面是否一致 * <p> * ConstraintValidator 接口的第一个参数传入的是自定义注解的类型, * 第二个参数传入的是自定义注解修饰的目标的类型 * <p> * 例如: * * @PasswordEqual public class PersonDTO { * private String name; * } * 那么第二个参数传入的就是 PersonDTO * <p> * 例如: * public class PersonDTO { * @PasswordEqual private String name; * } * 那么第二个参数传入的就是 String */ public class PasswordValidator implements ConstraintValidator<PasswordEqual, PersonDTO> { // 用于接收自定义注解中的参数 private int min; private int max; /** * 如果要实现接收参数,则必须要重写这个方法 * * @param constraintAnnotation 通过该参数的方法可以获取到自定义注解中的参数 */ @Override public void initialize(PasswordEqual constraintAnnotation) { this.min = constraintAnnotation.min(); this.max = constraintAnnotation.max(); } /** * 要将自定义注解和关联类关联起来必须要实现 isValid(),校验逻辑就是这里实现 * * @param personDTO 自定义注解修饰目标的类型 * @param constraintValidatorContext 关联类与注解 * @return 是否合法 */ @Override public boolean isValid(PersonDTO personDTO, ConstraintValidatorContext constraintValidatorContext) { String password1 = personDTO.getPassword1(); String password2 = personDTO.getPassword2(); if (password1.length() < this.min || password2.length() > this.max) { return false; } if (!StringUtils.isBlank(password1) && !StringUtils.isBlank(password2)) { return password1.equals(password2); } return false; } }
3、在DTO上打上注解
@Builder @Getter @Setter @PasswordEqual(min = 6, max = 8) public class PersonDTO { @Length(min = 4, max = 12, message = "姓名长度只能在4-12字符之间") @NonNull private String name; private Integer age; private String password1; private String password2; }
4、关联自定义注解与关联类,通过 @Constraint(validatedBy = PasswordValidator.class) 即可关联成功