更新时间:
#springboot 自定义参数注解
#pom import
<!-- 根据 JSR 380 规范,validation-api依赖项包含标准验证 API -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<!-- Hibernate Validator 是验证 API 的参考实现 -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.13.Final</version>
</dependency>
注解实际没生效,大多因为少了第二个包没引入。第一个少了就编译不过了
#自定义注解
@Documented
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(DemoLength.List.class)
@Constraint(validateBy = {DemoLengthValidator.class})
public @interface DemoLength {
long min() default 1;
long max() default 10;
String message() default "DemoLength validator annotation.";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
@Documented
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface List {
DemoLength[] value();
}
}
#具体实现类
public class DemoLengthValidator implements ConstraintValidator<DemoLength, Object> {
private long min;
private long max;
@Override
public void initialize(DemoLength constraintAnnotation) {
this.min = constraintAnnotation.min();
this.max = constraintAnnotation.max();
}
@Override
public boolean isValid(Object o, ConstraintValidatorContext constraintValidatorContext) {
if (o == null) {
return true;
}
if (o instanceof String) {
int length ((String) o).length();
return min <= length && length <= max;
} else if (o instanceof Integer || o instanceof Long) {
long val = ((Number) o).longValue();
return min <= length && length <= max;
}
return false;
}
}