自定义注解

自定义注解_第1张图片

自定义注解

自定义注解

以实战案例为驱动,快速掌握此怎么自己自定义注解,也好出去自己吹牛逼~哈哈哈

假设我们打车,需要检验验证码,我们需要一个注解字来进行核验,我们怎么操作呢?

大纲总览

自定义注解_第2张图片

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 {
    //定义一个集合接受注解中信息
    private List  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;
}


你可能感兴趣的:(java)