自定义注解 自定义注解主要依赖以下几个注解。 @Target(用于描述修饰对象的范围) 范围取值ElementType这个枚举类。 ANNOTATION_TYPE(注释类型声明) FIELD (字段声明) METHOD (方法声明) PARAMETER(参数声明) @Retention (注释类型的注释要保留多久) RUNTIME 编译器将把注释记录在类文件中,在运行时 JVM 将保留注释,因此可以通过反射读取 @Constraint(这个注解的主要作用就是帮助我们来处理验证逻辑的,约束注解) @Document(进行文档转化) 自定义注解用 @interface修饰 内部主要实现注解功能,我这个注解是用来验证字符串时候匹配的。 下面是验证注解实现
package config;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Target({FIELD,METHOD,PARAMETER,ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = ForbiddenValidator.class)
@Documented
public @interface Forbidden {
String message() default "{fordidden.word}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default {};
@Target({FIELD,METHOD,PARAMETER,ANNOTATION_TYPE})
@Retention(RUNTIME)
@Documented
@interface list{
Forbidden[] value();
}
}
下面是验证类实现
package config;
import org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorContextImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.util.StringUtils;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.io.Serializable;
public class ForbiddenValidator implements ConstraintValidator<Forbidden, String> {
private String[] fprdibben = {"admin"};
public void initilized(Forbidden constrastAnnotation){
}
@Override
public boolean isValid(String s, ConstraintValidatorContext context) {
if(StringUtils.isEmpty(context)){
return true;
}
for(String word:fprdibben){
if(s.contains(word)) return false;
}
return true;
}
}
下面是测试
package config;
import java.io.Serializable;
public class User implements Serializable {
@Forbidden
private String name;
public User(String name){
this.name = name;
}
}
|