当前位置:   article > 正文

springboot做自定义校验注解_springboot 字段检验自定义注解

springboot 字段检验自定义注解

目录

自定义校验注解的实现

注意:

首先,我们需要自定义一个校验注解:

注解含义:

@Target({ElementType.FIELD})

@Retention(RetentionPolicy.RUNTIME)

@Constraint(validatedBy = PhoneValidator.class)

校验注解逻辑实现类:

使用自定义校验注解:

控制器方法:


        有时候我们在接收前端产给我们数据的时候需要进行一些校验,部分校验可以通过已有的注解进行直接使用,但是仍存在一些需求是现有注解没有提供的,所以就需要我们自定义校验注解来实现我们需要的功能,那接下来就来看看自定义校验注解是怎么实现的吧~

要实现一个自定义校验注解,主要是有两步。一是注解本身,二是校验逻辑实现类

首先,我们来看一下校验注解的一个流程:

自定义校验注解的实现

现在我们以校验传过来的参数是否为正整数来实现自定义校验注解。

如下,我的实体类中有这样一个字段:(此处不能直接将类型设置为int型,不然前面无论传来什么值都会将其值修改为一个整型,会破坏数据的真实性)

注意:

1、此处不能直接使用@Pattern注解,因为这个注解只试用在类型为String的参数上;

2、不能使用@Digits注解,@Digits(integer = 1, fraction = 0, message = "数据精度只能是非负整数")

//    integer = 3: 这意味着数字的整数部分应该有3位。换句话说,该数字应该是一个千位数。
//fraction = 0: 这意味着数字的小数部分应该为0。换句话说,该数字应该是一个整数,而不是一个带有小数部分的数。
//message = "数据精度只能是非负整数": 这是在验证失败时显示的消息。在本例中,如果提供的数字不符合指定的精度要求,则会返回这条消息。

这个注解或根据你的要求自动将你传来的值进行四舍五入成整型。

首先,我们需要自定义一个校验注解:
  1. import com.datacommon.ParameterValidation.NonNegativeIntegerValidator;
  2. import javax.validation.Constraint;
  3. import javax.validation.Payload;
  4. import java.lang.annotation.ElementType;
  5. import java.lang.annotation.Retention;
  6. import java.lang.annotation.RetentionPolicy;
  7. import java.lang.annotation.Target;
  8. //校验字段必须为非负整数
  9. @Target(ElementType.FIELD)
  10. @Retention(RetentionPolicy.RUNTIME)
  11. @Constraint(validatedBy = NonNegativeIntegerValidator.class)
  12. public @interface IntegerParam {
  13. String message() default "整数型字段必须为非负整数";
  14. Class<?>[] groups() default {};
  15. Class<? extends Payload>[] payload() default {};
  16. }
注解含义:
@Target({ElementType.FIELD})

  注解是指定当前自定义注解可以使用在哪些地方,这里仅仅让他可以使用属性上。但还可以使用在更多的地方,比如说方法上、构造器上等等。

  • TYPE - 类,接口(包括注解类型)或枚举
  • FIELD - 字段(包括枚举常量)
  • METHOD - 方法
  • PARAMETER - 参数
  • CONSTRUCTOR - 构造函数
  • LOCAL_VARIABLE - 局部变量
  • ANNOTATION_TYPE -注解类型
  • PACKAGE - 包
  • TYPE_PARAMETER - 类型参数
  • TYPE_USE - 使用类型
@Retention(RetentionPolicy.RUNTIME)

  指定当前注解保留到运行时。保留策略有下面三种:

  • SOURCE - 注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃。
  • CLASS - 注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期。
  • RUNTIME - 注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在。
@Constraint(validatedBy = PhoneValidator.class)

  指定了当前注解使用哪个校验类来进行校验。

校验注解逻辑实现类:
  1. import com.datacommon.ParameterValidation.paramInterface.IntegerParam;
  2. import javax.validation.ConstraintValidator;
  3. import javax.validation.ConstraintValidatorContext;
  4. /**
  5. * 自定义参数校验规则
  6. * 校验穿进来的参数是否为非负整数
  7. */
  8. public class NonNegativeIntegerValidator implements ConstraintValidator<IntegerParam, Double> {
  9. @Override
  10. public void initialize(IntegerParam constraintAnnotation) {
  11. }
  12. @Override
  13. public boolean isValid(Double value, ConstraintValidatorContext context) {
  14. System.out.println(value);
  15. if(value.toString().contains(".0")){
  16. return true;
  17. }
  18. return !value.toString().contains(".") && !value.toString().contains("-");
  19. }
  20. }
使用自定义校验注解:

使用我们自定义的校验注解就和普通的注解一样,只需要在相关字段上加上我们的注解名称就行了~

控制器方法:

记住要在使用到校验类的时候加上@Valid注解

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/639129?site
推荐阅读
相关标签
  

闽ICP备14008679号