validation

前言:

validation主要功能是对用户输入的数据进行验证,确保数据的合法性和准确性。通过验证,可以防止用户输入错误或恶意输入,提高数据的质量和安全性。常见的验证功能包括:

  1. 必填字段验证:确保用户必须填写某些字段,防止漏填关键信息。
  2. 数据格式验证:验证用户输入的数据是否符合指定的格式要求,例如邮箱格式、手机号码格式等。
  3. 数值范围验证:验证数值型数据是否在指定的范围内,例如年龄必须在18岁以上。
  4. 唯一性验证:验证某个字段的值在数据库中是否唯一,例如用户名、邮箱等。
  5. 远程验证:通过发送请求到服务器端,验证用户输入的数据是否符合特定的条件,例如检查用户名是否已存在。
  6. 表单动态验证:实时验证用户输入的数据,例如实时检查密码强度、实时显示错误提示等。

通过使用验证功能,可以提高用户体验,减少错误数据的提交,保护系统的安全性和稳定性。

一、导入依赖

二、常用注解说明

1、@NotNull:用于验证对象是否为null。

不能为null没有size要求

2、@NotEmpty:用于验证字符串是否为空。

与@NotNull的区别,用此注解要求size>0

3、@Size:用于验证字符串、集合或数组的大小。

4、@Min和@Max:用于验证数字的最小值和最大值。

5、@Email:用于验证邮箱格式是否正确。

6、@Pattern:用于验证字符串是否匹配指定的正则表达式。

7、@AssertTrue和@AssertFalse:用于验证布尔值是否为true或false。

三、分组

加在实体类的属性中时,有的属性被标志为非空,但其他接口对此字段无要求,这样就产生了冲突,加入分组后则更清晰。

分组举例:

如下代码中有Add和Update两个分组,且都继承了Default,其中Default是默认分组,表示没有明确指定分组的属性,但这些属性是其他分组需要用的,所以继承Default可以继承该默认分组。

package com.moer.pojo;

import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.groups.Default;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Emp {
    
    @NotNull(groups = Emp.Update.class)
    private Integer id;
    @NotEmpty
    private String empName;
    @NotEmpty
    private String sex;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;

    //某个校验项没有指定分组,默认分组,分组可以继承

    public interface Add extends Default {

    }

    public interface Update extends Default {

    }
    

}

在controller中去使用分组,只需要指定分组所在位置即可,指定多个分组逗号隔开书写

四、自定义注解

新建包anno,新建注解State,并填入固定信息

其中@Constraint( validatedBy = {StateValidation.class} )该信息里的类为自己创建的,验证规则的类

package com.moer.anno;


import com.moer.validation.StateValidation;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;

import java.lang.annotation.*;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;


@Documented//元注解
@Target({ FIELD })//元注解 表示该注解用到的地方,这里表示在属性上
@Retention(RUNTIME)//元注解 表示注解保留到哪个阶段,这里是运行阶段
@Constraint(
        validatedBy = {StateValidation.class}//指定提供校验规则的类
)
public @interface State {
    //提供校验失败后的提示信息
    String message() default "state参数的值只能是启用或者是禁用";
    //指定分组
    Class<?>[] groups() default {};
    //负载 获取到state注解的附加信息(一般用不到)
    Class<? extends Payload>[] payload() default {};
}

新建包,并添加验证规则的类

package com.moer.validation;

import com.moer.anno.State;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;

public class StateValidation implements ConstraintValidator<State, String> {
    /**
     * 返回false校验不通过,返回true校验通过
     * @param s 校验的数据
     * @return 返回数据
     */
    @Override
    public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
        //提供校验规则
        if (s == null) {
            return false;
        }
        return s.equals("启用") || s.equals("禁用");
    }
}

完成后将@State添加到指定的属性上,该属性就有了自定义的校验规则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值