首页 > 其他分享 >自定义注解校验参数

自定义注解校验参数

时间:2024-09-11 19:37:24浏览次数:10  
标签:java 自定义 校验 annotation import 注解 public

自定义注解校验参数:
1、定义注解,写好返回值,申明注解的用处,文档生成

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;


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@Constraint(validatedBy = TypeValidClz.class)
@Documented
public @interface TypeValid {

    String message() default "type输入无效!";
    
    Class<?>[] groups() default {};
    
    Class<? extends Payload>[] payload() default {};

}



@Target(ElementType.FIELD)注解指定我们这个注解作用于FIELD:类的属性上,
@Retention(RetentionPolicy.RUNTIME)注解用于指定自定义注解的生命周期,即该注解在什么情况下可用。
RetentionPolicy.RUNTIME:表示注解在运行时仍然可用。允许程序通过反射读取注解的信息。换句话说,注解会在编译后保留,并在运行时可以通过反射机制访问。
@Documented 注解用于指示是否将被注解的元素包含在 Javadoc 中
@Constraint 注解用于标注自定义约束注解,并通过 validatedBy 属性指定约束注解的验证器(Validator)类。
validatedBy = TypeValidClz.class 指定了该约束注解的验证逻辑由TypeValidClz 类来实现。


import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class  TypeValidClz implements ConstraintValidator<TypeValid, String> {

    @Override
    public void initialize(TypeValid constraintAnnotation) {
    }
    
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        // 实现验证逻辑,验证 value 是否符合条件,下面逻辑指定了输入的值不能为空且已type开头
        return value != null && value.startsWith("type");
    }

}

使用注解限制参数:

public Class UserDTO{

private String name;

@TypeValid 
private String Type;

}

标签:java,自定义,校验,annotation,import,注解,public
From: https://www.cnblogs.com/cyqf/p/18408808

相关文章

  • CheckSum算法--又名累加和校验算法
    校验和(Checksum)是网络协议使用的数据错误检测方法,并且被认为比LRC(纵向冗余校验,LongitudinalRedundancyCheck,LRC),VRC和CRC(循环冗余校验(CyclicRedundancyCodes,CRC))更可靠。此方法在发送方使用校验和生成器,在接收方使用校验和校验器。累加和校验算法的实现发送方:对要数据累加,得......
  • 【Python脚本】自定义Payload的ICMP报文发送
    原创Evan运维小站OpsStationICMP(InternetControlMessageProtocol)是一种网络层协议,主要用于在IP主机、网关之间传递控制消息。通常,ICMP报文具有固定的格式,并用于发送错误报告或与网络诊断相关的消息。标准ICMP报文不包含用户定义的payload内容。但是,你可以通过发送一个"......
  • Springboot基于注解鉴权
    @Slf4j@ComponentpublicclassResourceInterceptorimplementsHandlerInterceptor{@ResourceUserRoleServiceuserRoleService;@OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler){......
  • Java的class与String互相转换,自定义密码策略
    目的客户要求密码校验方式,用自己的认证方式。提供一种方案,在不出补丁的情况下,解决这个问题。原理1、本地写一个类,用客户想要的方案,实现密码校验的接口,编译成class类。2、然后把这个class类,先转换成二进制,再转换成16进制的字符串。3、将字符串写到客户的数据库里。4、重启服务,在......
  • Springboot枚举自定义序列化
    packagexxxxxxxxxxxxx;importcom.fasterxml.jackson.core.JsonGenerator;importcom.fasterxml.jackson.databind.JsonSerializer;importcom.fasterxml.jackson.databind.ObjectMapper;importcom.fasterxml.jackson.databind.SerializerProvider;importcom.fasterx......
  • IF语句 | WITH子句 | 自定义函数
    IF语句IF(expr1,expr2,expr3)expr1的值为TRUE,则返回值为expr2expr1的值为FALSE,则返回值为expr3SELECTIF(TRUE,1+1,1+2);->2SELECTIF(FALSE,1+1,1+2);->3WITH子句WITH子句主要用来创建一个暂时的结果集,这个结果集在后续的查询中可以多次使用WITHta......
  • LEAN 类型系统属性 之 定义上相等的非确定性(Undecidability of Definitional Equality
        由于定义上相等(DefinitionalEquality)作用在所有情况,由此,当遇到不一致(Inconsistent)的时候,会导致其结果是不确定的,即会无限展开(unfoldingforever)下去。    原文中,是通过一个定义在自然数(ℕ)的大于关系(>)上的可达类型(AccessibilityType)来论证,这个看原文很好......
  • 痞子衡嵌入式:在MDK开发环境下自定义安装与切换不同编译器版本的方法
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是在MDK开发环境下自定义安装与切换不同编译器版本的方法。KeilMDK想必是嵌入式开发者最熟悉的工具之一了,自2005年Arm公司收购Keil公司之后,MDK就走上了发展快车道,从v2.50a一路狂奔到现在最新的v......
  • 新手必看-Knife4j的常用注解
    前言    SpringBoot集成Knife4j可看另一篇文章:http://t.csdnimg.cn/bmPhjKnife4j常用注解1,@Tag   添加在controller类上,可以指定该controller模块的名称。knife4j默认根据字母排序,加上序号后会根据序号排序。@Tag(name="管理后台-01.登录校验",descri......
  • 17个Mybatis Plugs注解:Mybatis Plugs插件架构设计与注解案例(必须收藏)
    MyBatisPlugins框架提供了一种强大而灵活的机制,允许开发者通过实现Interceptor接口来扩展MyBatis的核心功能。这种插件化的方法无需修改MyBatis源码,即可引入诸如性能监控、日志记录、数据加密、查询缓存等额外功能。通过注解如@Intercepts、@Signature等,开发者可以精确地......