域名备案 个人 网站基本信息查询,济南建设设备安装有限责任公司,做网站建设个体经营小微企业,网站建设干货图书前言#xff1a;
今天学到这个#xff0c;闲着也是闲着#xff0c;就写一个记录一下#xff0c;也算是总结
我们的步骤是这样的
1.自定义注解State
2.自定义校验数据的类StateValidation实现ConstrainValidator接口
3.在需要校验的地方使用自定义注解
1.自定义注解
这…前言
今天学到这个闲着也是闲着就写一个记录一下也算是总结
我们的步骤是这样的
1.自定义注解State
2.自定义校验数据的类StateValidation实现ConstrainValidator接口
3.在需要校验的地方使用自定义注解
1.自定义注解
这边以State为例创建注解 参考NotEmpty设计我们的注解
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//package javax.validation.constraints;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;Documented
Constraint(validatedBy {}
)
Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
Retention(RetentionPolicy.RUNTIME)
Repeatable(NotEmpty.List.class)
public interface NotEmpty {String message() default {javax.validation.constraints.NotEmpty.message};Class?[] groups() default {};Class? extends Payload[] payload() default {};Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})Retention(RetentionPolicy.RUNTIME)Documentedpublic interface List {NotEmpty[] value();}
}这边我把比较有用的博客给找出来有空可以看看
Documented注解的作用-CSDN博客
java常见的注解之 Target-CSDN博客
Retention注解详解-CSDN博客
java中Repeatable的理解-CSDN博客Repeatable-CSDN博客
使用中最为关键的
Spring注解之——Constraint 自定义约束注解-CSDN博客
这边我们不使用Repeatable与Retention(使用默认的class作用范围)
package com.yjzx.anno;import com.yjzx.validation.StateValidation;import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;Target({ElementType.FIELD})//元注解
Retention(RetentionPolicy.RUNTIME)
Documented
Constraint(validatedBy {StateValidation.class}//指定要识别的类
)
public interface State {//提供校验失败后的提示信息String message() default state参数的值只能是已发布或者草稿 ;//指定分组Class?[] groups() default {};//负载获取State注解附加信息Class? extends Payload[] payload() default {};}2.自定义校验数据的类实现ConstrainValidator接口
这边使用StateValidation实现并继承isValid方法
package com.yjzx.validation;import com.yjzx.anno.State;import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;public class StateValidation implements ConstraintValidatorState,String {/**** param s 将来要校验的数据* param constraintValidatorContext* return 若返回false则不通过true校验通过*/Overridepublic boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {//提供校验规则if(snull){return false;}if(s.equals(已发布)||s.equals(草稿)){return true;}return false;}
}3.在需要校验的地方使用自定义注解
像这样因为我设置的Target是字段、枚举的常量可以这么使用其他请去上面找一下
Target({ElementType.FIELD}) Stateprivate String state;//发布状态 已发布|草稿 结果的话我这边插一个出错的截图吧 就是这样如果是对的就正常运行
结束。