那用戶注冊的時候,判斷用戶輸入的兩次密碼是否一致舉例子:
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) 即可關聯成功