首页 > 编程知识 正文

java注解动态传参数,springboot自定义启动类

时间:2023-05-03 23:39:48 阅读:144248 作者:3667

从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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。