侧边栏壁纸
  • 累计撰写 57 篇文章
  • 累计创建 23 个标签
  • 累计收到 4 条评论

自定义参数校验注解

cluski
2022-03-16 / 0 评论 / 1 点赞 / 155 阅读 / 1,918 字
温馨提示:
本文最后更新于 2022-03-16,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

自定义参数校验注解

使用自定义参数校验的优势

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”的时候,验证出错。

image-20220316181803850

参考链接:

Spring Validation实现原理,参数校验没那么简单

@Constraint注解配合自定义验证类型注解的开发

SpringBoot参数校验注解

1

评论区