1.概述
Validation 是一种检查机制,用来验证数据的有效性和完整性。其目标是确保数据满足特定的条件或规则,从而防止无效或恶意数据进入系统。
2.使用
环境:spring boot3
2.1 导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>3.0.2</version>
</dependency>
2.2 添加注解
首先要在controller上添加 @Validated 开启验证,然后如果是传入的参数验证可以直接在参数前加验证注解;
如果是传入的对象,则必要在对象前加 @Validated,然后在实体类中某个必要验证的字段上添加验证注解;
- @Validated
- @Tag(name = "用户相关接口")
- public class UserController {
- public Result updateUser(@RequestBody @Validated User user) {}
- public ResponseResult updateUserAvatar(@RequestParam @URL String avatar) {}
- }
复制代码- public class User {
- @NotEmpty
- @Size(max = 10,min = 1)
- private String nickname;
- @Email
- private String email;
- }
复制代码 3.分组校验
某个实体类如果参加多个方法的校验,就必要将校验条件分组
- @Data
- public class Category {
- @TableId(value = "id", type = IdType.AUTO)
- @NotNull(groups = Update.class)
- private Integer id;//主键ID
- @NotEmpty(groups = {Update.class,Add.class})
- private String categoryName;//分类名称
- @NotEmpty
- private String categoryAlias;//分类别名
-
- public interface Add extends Default {
- }
- public interface Update extends Default {
- }
- }
复制代码
- 如果字段不指定分组 ,则归属于默认分组,必要该字段的分组必要继承Default
- public Result add(@RequestBody @Validated(Category.Add.class) Category category){}
- public Result update(@RequestBody @Validated(Category.Update.class) Category category){}
复制代码 4.自定义验证注解
有的时间提供的注解满足不了验证需求,我们可以自己自定义注解
举例:
- import com.luobei.validation.StateValication;
- import jakarta.validation.Constraint;
- import jakarta.validation.Payload;
- import java.lang.annotation.*;
- /**
- * @author : luobei
- * @date : 2024/5/17 15:58
- */
- @Documented //在生成文档时包含这个注解
- @Constraint(validatedBy = {StateValication.class}) //指定提供校验规则的类
- @Target({ElementType.FIELD}) //定义注解的应用目标,这里注解针对类的属性
- @Retention(RetentionPolicy.RUNTIME) //注解会在运行时可用
- public @interface State {
- //校验失败的后的信息
- String message() default "state参数的值只能是已发布或者草稿";
- //指定分组
- Class<?>[] groups() default {};
- //负载
- Class<? extends Payload>[] payload() default {};
- }
复制代码 定义验证规则:
- import com.luobei.annotation.State;
- import jakarta.validation.ConstraintValidator;
- import jakarta.validation.ConstraintValidatorContext;
- /**
- * @author : luobei
- * @date : 2024/5/17 16:48
- * @return: 返回false校验不通过,反之亦然
- */
- public class StateValication implements ConstraintValidator<State,String> {
- @Override
- public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
- //提供校验规则
- if(value == null){
- return false;
- }
- if(value.equals("已发布")||value.equals("草稿")){
- return true;
- }
- return false;
- }
- }
复制代码 5.验证注解汇总
@URL:验证是否为有效的url
@Null:验证对象是否为 null
@NotNull:验证对象是否不为 null
@AssertTrue:验证 Boolean 字段的值是否为 true
@AssertFalse:验证 Boolean 字段的值是否为 false
@Min(value):验证数值是否大于即是指定的最小值
@Max(value):验证数值是否小于即是指定的最大值
@DecimalMin(value):验证数值是否大于即是指定的最小值(字符串形式的值)
@DecimalMax(value):验证数值是否小于即是指定的最大值(字符串形式的值)
@Size(min, max):验证元素的巨细是否在指定范围内(可以应用于字符串、聚集、数组等)
@Digits(integer, fraction):验证数值的整数位和小数位的位数
@Past:验证日期是否在过去
@PastOrPresent:验证日期是否在过去或如今
@Future:验证日期是否在将来
@FutureOrPresent:验证日期是否在将来或如今
@Pattern(regex):验证字符串是否符合指定的正则表达式
@Email:验证字符串是否是有效的电子邮件地址
@NotEmpty:验证字符串、聚集、地图或数组是否不为空(长度不为 0)
@NotBlank:验证字符串是否不为 null 且去除空格后的长度大于 0
@Positive:验证数值是否为正数
@PositiveOrZero:验证数值是否为正数或 0
@Negative:验证数值是否为负数
@NegativeOrZero:验证数值是否为负数或 0
@CreditCardNumber:验证字符串是否是有效的名誉卡号
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |