Java springboot @Constraint自定義驗證註解

基本驗證註解:
@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) 被註釋的元素必須符合指定的正則表達式

自定義驗證註解實現
1.定義註解

@Target({ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
//註解的邏輯實現類Judgeimpl
@Constraint(validatedBy = {Judgeimpl.class})
public @interface judge {
    //函數自己設計
    String message() default "名字格式錯誤";

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

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

}

補充

java四種原註解 @Target 表示該註解用於什麼地方,可能的值在枚舉類 ElemenetType 中,包括:

 ElemenetType.CONSTRUCTOR-----------------------------構造器聲明 
 ElemenetType.FIELD ----------------------------------域聲明(包括 enum 實例) 
 ElemenetType.LOCAL_VARIABLE------------------------- 局部變量聲明 
 ElemenetType.METHOD ---------------------------------方法聲明 
 ElemenetType.PACKAGE --------------------------------包聲明 
 ElemenetType.PARAMETER ------------------------------參數聲明 
 ElemenetType.TYPE----------------------------------- 類,接口(包括註解類型)或enum聲明 

@Retention 表示在什麼級別保存該註解信息。可選的參數值在枚舉類型 RetentionPolicy 中,包括:

 RetentionPolicy.SOURCE-------------註解將被編譯器丟棄 
 RetentionPolicy.CLASS -------------註解在class文件中可用,但會被VM丟棄 
 RetentionPolicy.RUNTIME ---------VM將在運行期也保留註釋,因此可以通過反射機制讀取註解的信息。

@Documented 將此註解包含在 javadoc 中
,它代表着此註解會被javadoc工具提取成文檔。在doc文檔中的內容會因爲此註解的信息內容不同而不同。相當與@see,@param 等。

@Inherited 允許子類繼承父類中的註解。

Annotation的一般形式是 :

public @interface MyAnnotation {  
    String value() default "hahaha";  
} 
其實等同於

public class MyAnnotation extends java.lang.annotation.Annotation{   
     private String value = "hahaha";   
     public void setValue(String value){   
          this.value = value;   
     }   
     public String getValue(){   
          return value;   
      }   
} 

2.實現類完成

public class Judgeimpl implements ConstraintValidator<judge,Object> {


    @Override
    public void initialize(judge judge) {
    //初始化 可以此處初始化一些變量
        System.out.println("init");
        System.out.println(judge.message());
       
    }

    @Override
    public boolean isValid(Object o, ConstraintValidatorContext constraintValidatorContext) {
        if(o==null){
            return false;
            
        }else if(o.toString().trim().equals("XXXX")){//驗證字符串格式            //返回true表示驗證通過
            return true;
        }
    	//返回false表示驗證不通過
        return false;
    }
}

3.在實體類使用註解

@Data
public class Teacher {
	//自定義驗證註解使用
    @judge
    String name;

   @Past(message = "不能是未來時間")
    Date birthday;


}

4.最後在controller接受參數加上@valid測試一下即可

@GetMapping("/test")
    @ResponseBody
    public String testTea(@Valid @RequestBody Teacher teacher){
        return teacher.getName();
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章