自定义注解
以实战案例为驱动,快速掌握如何定制自己的注释,或者出去吹牛~哈哈哈
假设我们坐出租车,需要检查验证码,我们需要一个注释字来验证,我们怎么操作?
大纲总览
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;}