1. 程式人生 > 實用技巧 >SpringBoot中自定義註解

SpringBoot中自定義註解

那使用者註冊的時候,判斷使用者輸入的兩次密碼是否一致舉例子:

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) 即可關聯成功