spring mvc 使用@notNull 註解驗證請求參數

處理請求時, 有些參數是必傳或者必須遵循某些規則的, 如果針對每個請求都寫一遍驗證的話相當繁瑣, 而且代碼維護起來也麻煩, 正好框架將參數校驗的功能抽象處理啊了, 我們可以利用這個完成80%的校驗場景

使用方式

使用起來很簡單, 只需要加上幾個註解即可

@NotNull

在需要驗證的非空字段前面加上@NotNull註解(註解還可設置提示語), 如下
@NotNull註解

@Min

有寫數值類型的需要限制範圍, 例如: 時間需要大於0
時間戳應該大於0

@valid

在需要校驗的接口的入參前加上@valid註解
入參前加上

驗證生效

這兩個地方加上註解就可以了
生效圖示

進階

有時候默認的非空或者範圍校驗不能滿足部分定製化的需求
我們可以通過自定義校驗註解來按我們的凡是校驗數據

註解接口

定義一個自己的註解(檢驗邏輯入口)

注意:
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
這兩個是必須的…

@Target(value= {METHOD, FIELD, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = CheckEvaluationKeyValidator.class)
@Documented
public @interface CheckEvaluationKey {
    String message() default "{CheckEvaluationKey}";

    Class<?>[] groups() default {};
    
    Class<? extends Payload>[] payload() default {};

    String evaluationKey() default "";
}

校驗邏輯實現

實現校驗邏輯, 需要在自定義註解中指定使用的校驗邏輯
@Constraint(validatedBy = CheckEvaluationKeyValidator.class)
系統就會更具註解自動進入我們的校驗邏輯

public class CheckEvaluationKeyValidator implements ConstraintValidator<CheckEvaluationKey, String> {

    private String checkEvaluationKey;
    
    @Override
    public void initialize(CheckEvaluationKey constraintAnnotation) {
        this.checkEvaluationKey = constraintAnnotation.evaluationKey();
    }
    
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        
        if (JudgeUtil.isNull(checkEvaluationKey)) {
            String evaluationName = EvaluationEnum.getEvaluationNameWithOutAssert(value);
            return JudgeUtil.isPresent(evaluationName);
            
        } else {
            return JudgeUtil.equals(value, checkEvaluationKey);
        }
    }
}

自定義註解使用

自定義註解使用

其他校驗註解

  • @Null: 被註釋的元素必須爲null
  • @NotNull: 被註釋的元素不能爲null
  • @AssertTrue: 被註釋的元素必須爲true
  • @AssertFalse: 被註釋的元素必須爲false
  • @Min(value): 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值
  • @Max(value): 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值
  • @DecimalMin(value): 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值
  • @DecimalMax(value): 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值
  • @Size(max,min): 被註釋的元素的大小必須在指定的範圍內。
  • @Digits(integer,fraction): 被註釋的元素必須是一個數字,其值必須在可接受的範圍內
  • @Past: 被註釋的元素必須是一個過去的日期
  • @Future: 被註釋的元素必須是一個將來的日期
  • @Pattern(value): 被註釋的元素必須符合指定的正則表達式。
  • @Email: 被註釋的元素必須是電子郵件地址
  • @Length: 被註釋的字符串的大小必須在指定的範圍內
  • @NotEmpty: 被註釋的字符串必須非空
  • @Range: 被註釋的元素必須在合適的範圍內
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章