|
@@ -0,0 +1,42 @@
|
|
|
+package com.chelvc.framework.common.validator;
|
|
|
+
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.util.Date;
|
|
|
+import javax.validation.ConstraintValidator;
|
|
|
+import javax.validation.ConstraintValidatorContext;
|
|
|
+
|
|
|
+import com.chelvc.framework.common.annotation.Dates;
|
|
|
+import com.chelvc.framework.common.util.DateUtils;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 日期参数验证器
|
|
|
+ *
|
|
|
+ * @author Woody
|
|
|
+ * @date 2024/4/27
|
|
|
+ */
|
|
|
+public class DateValidator implements ConstraintValidator<Dates, Object> {
|
|
|
+ private Dates annotation;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void initialize(Dates annotation) {
|
|
|
+ this.annotation = annotation;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean isValid(Object value, ConstraintValidatorContext context) {
|
|
|
+ if (this.annotation == null
|
|
|
+ || !(value instanceof Date || value instanceof LocalDate || value instanceof LocalDateTime)) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ int min = this.annotation.min(), max = this.annotation.max();
|
|
|
+ if (min == Integer.MIN_VALUE && max == Integer.MAX_VALUE) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ Date date = value instanceof Date ? (Date) value : value instanceof LocalDate ?
|
|
|
+ DateUtils.convert((LocalDate) value) : DateUtils.convert((LocalDateTime) value);
|
|
|
+ long datetime = date.getTime(), now = System.currentTimeMillis();
|
|
|
+ return (min == Integer.MIN_VALUE || datetime >= now + min * 1000)
|
|
|
+ && (max == Integer.MAX_VALUE || datetime <= now + max * 1000);
|
|
|
+ }
|
|
|
+}
|