jakarta.validation
是一套資料校驗的規範,內建了NotBlank
, NotNull
, Min
, Pattern
等校驗註解外,還提供了自定義註解進行任意校驗規則的擴充套件。
依賴包為:
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>3.0.2</version>
</dependency>
這是一個介面規範包,不包含實現。實現jakarta.validation規範的框架有hibernate-validator
,只需要pom.xml裡引入該依賴
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>8.0.1.Final</version>
</dependency>
但程式碼裡無任何hibernate-validator的import依賴,想切換到其他家的實現時,只需pom.xml裡改一下,
程式碼可以不用任何修改,這也是Jakarta EE的一向主張:面象介面程式設計,依賴包也是如此,介面包和實現包分離,業務程式碼只依賴介面包,不依賴具體實現包。
示例
使用註解來校驗值是否為一個合格的cron表示式。
1、建立annotation
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface IsCronExpression {
String message() default "表示式格式錯誤";
//分組校驗
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
2、建立對應的校驗器
public class IsCronExpressionValidator implements ConstraintValidator<IsCronExpression, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
try {
CronExpression.parse(value);
return true;
} catch (Exception e) {
return false;
}
}
}
3、在IsCronExpression 上指定校驗器
@Constraint(validatedBy = {IsCronExpressionValidator.class})
4、使用 @IsCronExpression
@Data
public class TaskRequest {
@NotBlank
private String taskName;
@NotBlank
private String description;
/**
* 表示式
*/
@NotBlank
@IsCronExpression
private String taskCron;
}