从spring boot2.3. 0版开始,没有引入启用验证的软件包,需要手动引用,并且依赖于
ependencygroupidorg.spring framework.boot/groupidartifactidspring-boot-starter-validation/artifact id/dependen ciden
注释保留位置的: @Retention
//注释只存在于源代码中,class字节代码文件不包含@ retention (retention policy.source ) /默认保留策略,注释存在于class字节代码文件中但是,@retention (retention policy.class ) /注释存在于class字节代码文件中,并在运行时反射性地@ retention ) retentionpolicy.runtime
//接口、类、枚举、注释@target(elementtype.type ) /字段、枚举常量@ target (element type.field )/方法@target ) elementtype.field构造函数@ target (element type.constructor ) /局部变量) target ) element type.local _ vvve
注释可以继承@Inherited
自定义注释@Constraint
如果要验证接口参数,必须使用@valid启用注释
@getmapping(/check ) ) publicstringtest02 ) @valid@requestbodyparms ) { return s.getNameS; }要具体创建自定义注释,请首先定义@interface
@ constraint (validated by={ checkname validator.class } ) retention (保留策略. runtime ) target (元素类型分类) [] groups () default { } ); Class? 扩展支付[ ]支付()默认值{ } ); 其中,CheckName是注释名称,validated by={ checknamevalidator.class }的checkname validator是真正进行验证方法的类,message定制个数和属性
请注意,这三个一定有。 否则,将报告错误。
String message () default ()参数为指定值); Class? [] groups () default { } ); Class? 扩展支付[ ]支付()默认值{ } ); 真正的检查类:
publicclasschecknamevalidatorimplementsconstraintvalidatorcheckname,字符串{字符串消息; @ overridepublicvoidinitialize (checknameconstraintannotation ) this.message=constraint annotation.message ); } @ overridepublicbooleanisvalid (strings,constraintvalidatorcontextconstraintvalidatorcontext ) IF ) s.equals ) 返回真; }返回假; 必须继承ConstraintValidator注释名称、验证对象
初始化(和isValid )有两种方法
方法initialize () (不一定必须,而是使用可用于注释定义的参数isValid ) )方法初始化和使用
方法isValid ) )必须安装,是验证逻辑存在的地方
最后是评论的位置:
公共类parm { @ checkname (消息='消息' ) }私有字符串名称; public String getNameS () { return NameS; } publicvoidsetnames (字符串名称) { NameS=name; }注释括号内是注释定义的参数,可以自定义
完整示例:
Check.java (评论类) )。
//检查逻辑和注释的范围是数组,@target({elementtype.field, element type.parameter } @ retention (retention policy.runtime ) constraint ) validated by={ paramconstraintvalidated }注释/**没有错误报告。 xxxcontainsconstraintannotation,butdoesnotcontainamessageparameter * */string message () default '参数不是指定值'; /**没有错误报告。 xxxcontainsconstraintannotation,butdoesnotcontainagroupsparameter * */class? [] groups () default {} ); /**没有错误报告。 xxxcontainsconstraintannotation,butdoesnotcontainapayloadparameter * */class? 扩展支付[ ]支付()默认值{ } ); } ParamConstraintValidated.java (检查类)
/** * Check是注释名称Object是已验证的数据类型*/publicclassparamconstraintvalidatedimplementsconstraintvalidatorcheck, 从object { privateliststtstate } @ overridepublicvoidinitialize (checkconstraintannotation ) /属性上的注释中, 自定义属性的值paramvalues=Arrays.aslist )获取constraintannotion } @ overridepublicbooleanisvalid (objecto,constraintvalidatoror