当前位置: 首页 > 图灵资讯 > 技术篇> 自定义注解

自定义注解

来源:图灵教育
时间:2023-12-17 11:49:07

自定义注解

以实战案例为驱动,快速掌握如何定制自己的注释,或者出去吹牛~哈哈哈

假设我们坐出租车,需要检查验证码,我们需要一个注释字来验证,我们怎么操作?

大纲总览

image.png

1.定义注解

您可以创建一个包单门来存储您自己的注释: 如constraints

然后我们在这个包下创建一个注释界面

package com.boyunv.apipassenger.constraints;import javax.validation.Constraint;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/* *@description * *@author boyunv *@create 2023/12/17 9:47 *@version 1.0 */@Target(ElementType.FIELD)  ///这个注释表明我们定义的注释作用在属性上@Retention(RetentionPolicy.RUNTIME) //表示注释在运行过程中生效@Constraint(validatedBy = VehicleTypeCheckValidator.class)  //validatedBy: 声明你想验证哪种类型?  (这个关键词很重要)public @interface VehicleTypeCheck {        /**     * 车辆类型选项(例)     * @return     */    String[] vehicleTypeValue() default{};        /**     * 提示信息     * @return     */    String  message() default "车辆类型不正确";    }
2.解析注解

**定义一个类: **VehicleTypeCheckValidator.java

**实现继承: **ConstraintValidator

package com.boyunv.apipassenger.constraints;/* *@description *  解析注解 *@author boyunv *@create 2023/12/17 9:55 *@version 1.0 */import javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext;import java.util.Arrays;import java.util.List;/** * ConstraintValidator: 必须继承的类别 * 实现的泛型: VehicleTypeCheck: 定义注释界面  String: 结果 *  */public class VehicleTypeCheckValidator implements ConstraintValidator<VehicleTypeCheck,String> {    //定义集合接收注释中的信息    private List<String>  vehicleTypeCheckValue=null;        @Override    public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {                if(vehicleTypeCheckValue.contains(s)){            return true ;        }        return false;    }        @Override    public void initialize(VehicleTypeCheck constraintAnnotation) {        ////拿取传来的数组信息        vehicleTypeCheckValue= Arrays.asList(constraintAnnotation.vehicleTypeValue());        ConstraintValidator.super.initialize(constraintAnnotation);    }}
3.使用注解

直接看下面的定义,这一步很简单

package com.boyunv.apipassenger.request;/* *@description *  使用注解 *@author boyunv *@create 2023/12/17 10:04 *@version 1.0 */import com.boyunv.apipassenger.constraints.VehicleTypeCheck;import javax.validation.constraints.NotBlank;public class ForecastPriceDTO {        @NotBlank(message = "车辆类型不正确")    @VehicleTypeCheck(vehicleTypeValue = {"1","2"})  ///这就是我们需要分析注释传输的数组信息    private String  vehicleType;}