SpringBoot自定义check注解

  • A+
所属分类:SpringBoot
@Target({ ElementType.TYPE, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = RequiredValidator.class)
public @interface Required {

    String message() default RequiredValidator.MESSAGE;


    Class<?>[] groups() default {};


    Class<? extends Payload>[] payload() default {};

    public class RequiredValidator implements ConstraintValidator<Required, Object> {
        public static final String MESSAGE = "{error.validation.required}";

        @Override
        public void initialize(Required constraintAnnotation) {
        }

        @Override
        public boolean isValid(Object object, ConstraintValidatorContext context) {
            if (object == null) {
                return false;
            }
            if (object instanceof String) {
                if (object.toString().trim().isEmpty()) {
                    return false;
                }
                return true;
            }

            return true;
        }
    }
}

其中下面的这部分是所有java自带的check注解里都有的。copy过来即可。

String message() default RequiredValidator.MESSAGE;


    Class<?>[] groups() default {};


    Class<? extends Payload>[] payload() default {};

validatedBy里指定的是实现类的类名,实现类里实现了ConstraintValidator接口,重载initialize和isValid方法,其中check的内容写在isValid方法里即可。

在controller里用@Validated即可使check生效。

@GetMapping("list")
public ModelAndView list(@Validated ListFormEntity formEntity, BindingResult result) {
     if (result.hasErrors()) {
        return m;
    }

@Retention :用来说明该注解类的生命周期。它有以下三个参数:
RetentionPolicy.SOURCE : 注解只保留在源文件中
RetentionPolicy.CLASS : 注解保留在class文件中,在加载到JVM虚拟机时丢弃
RetentionPolicy.RUNTIME : 注解保留在程序运行期间,此时可以通过反射获得定义在某个类上的所有注解。

@Target : 用来说明该注解可以被声明在那些元素之前。
ElementType.TYPE:说明该注解只能被声明在一个类前。
ElementType.FIELD:说明该注解只能被声明在一个类的字段前。
ElementType.METHOD:说明该注解只能被声明在一个类的方法前。
ElementType.PARAMETER:说明该注解只能被声明在一个方法参数前。
ElementType.CONSTRUCTOR:说明该注解只能声明在一个类的构造方法前。
ElementType.LOCAL_VARIABLE:说明该注解只能声明在一个局部变量前。
ElementType.ANNOTATION_TYPE:说明该注解只能声明在一个注解类型前。
ElementType.PACKAGE:说明该注解只能声明在一个包名前。

@Constraint来限定自定义注解的方法

 

ZPY

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: