自定义参数校验注解
使用自定义参数校验的优势
1.消除耦合,如果哪天你需要更改正则表达式你需要在每个引用的地方进行更改
2.通俗易懂,可以一目了然表示这是一个手机校验的注解,即便代码的阅读者对正则表达式不太熟悉,也可以猜出这个注解用来干嘛的
3.更强大,自定义校验逻辑,可以干更多的事情,甚至可以在校验器中引入其他的组件如使用@Autowired引入服务类进行处理校验判断
1 创建注解
package com.example.annotationdemo.annotations;
import com.example.annotationdemo.validator.isWyfValidator;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {isWyfValidator.class})
public @interface isWyf {
String message() default "此人不是王一飞";
String name() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
注意:message用于显示错误信息这个字段是必须的,groups和payload也是必须的
@Constraint(validatedBy = )用来指定处理这个注解逻辑的类
2 创建验证器类
package com.example.annotationdemo.validator;
import com.example.annotationdemo.annotations.isWyf;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class isWyfValidator implements ConstraintValidator<isWyf, String> {
private String name;
@Override
public void initialize(isWyf constraintAnnotation) {
ConstraintValidator.super.initialize(constraintAnnotation);
name = constraintAnnotation.name();
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
System.out.println("name is " + name);
return "wyf".equals(value);
}
}
3 使用
package com.example.annotationdemo.service;
import com.example.annotationdemo.annotations.isWyf;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
@Component
@Validated
public class TestService {
public void test2(@isWyf(name = "caolu") String name) {
System.out.println(name);
}
}
当调用test2方法的时候,传入的name不是“wyf”的时候,验证出错。

参考链接:
评论区