基本驗證註解:
@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();
}