validation好用的Java数据校验工具

金歌  论坛元老 | 2024-8-18 11:52:40 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1031|帖子 1031|积分 3093

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,然后在实体类中某个必要验证的字段上添加验证注解;
  1. @Validated
  2. @Tag(name = "用户相关接口")
  3. public class UserController {
  4.     public Result updateUser(@RequestBody @Validated User user) {}
  5.     public ResponseResult updateUserAvatar(@RequestParam @URL String avatar) {}
  6. }
复制代码
  1. public class User {
  2.     @NotEmpty
  3.     @Size(max = 10,min = 1)
  4.     private String nickname;
  5.     @Email
  6.     private String email;
  7. }
复制代码
3.分组校验

         某个实体类如果参加多个方法的校验,就必要将校验条件分组
  1. @Data
  2. public class Category {
  3.     @TableId(value = "id", type = IdType.AUTO)
  4.     @NotNull(groups = Update.class)
  5.     private Integer id;//主键ID
  6.     @NotEmpty(groups = {Update.class,Add.class})
  7.     private String categoryName;//分类名称
  8.     @NotEmpty
  9.     private String categoryAlias;//分类别名
  10.    
  11.     public interface Add extends Default {
  12.     }
  13.     public interface Update extends Default {
  14.     }
  15. }
复制代码


  • 如果字段不指定分组 ,则归属于默认分组,必要该字段的分组必要继承Default
  1. public Result add(@RequestBody @Validated(Category.Add.class) Category category){}
  2. public Result update(@RequestBody @Validated(Category.Update.class) Category category){}
复制代码
4.自定义验证注解

        有的时间提供的注解满足不了验证需求,我们可以自己自定义注解
        举例:
  1. import com.luobei.validation.StateValication;
  2. import jakarta.validation.Constraint;
  3. import jakarta.validation.Payload;
  4. import java.lang.annotation.*;
  5. /**
  6. * @author : luobei
  7. * @date : 2024/5/17 15:58
  8. */
  9. @Documented                                         //在生成文档时包含这个注解
  10. @Constraint(validatedBy = {StateValication.class})  //指定提供校验规则的类
  11. @Target({ElementType.FIELD})                        //定义注解的应用目标,这里注解针对类的属性
  12. @Retention(RetentionPolicy.RUNTIME)                 //注解会在运行时可用
  13. public @interface State {
  14.     //校验失败的后的信息
  15.     String message() default "state参数的值只能是已发布或者草稿";
  16.     //指定分组
  17.     Class<?>[] groups() default {};
  18.     //负载
  19.     Class<? extends Payload>[] payload() default {};
  20. }
复制代码
        定义验证规则:
  1. import com.luobei.annotation.State;
  2. import jakarta.validation.ConstraintValidator;
  3. import jakarta.validation.ConstraintValidatorContext;
  4. /**
  5. * @author : luobei
  6. * @date : 2024/5/17 16:48
  7. * @return: 返回false校验不通过,反之亦然
  8. */
  9. public class StateValication implements ConstraintValidator<State,String> {
  10.     @Override
  11.     public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
  12.         //提供校验规则
  13.         if(value == null){
  14.             return false;
  15.         }
  16.         if(value.equals("已发布")||value.equals("草稿")){
  17.             return true;
  18.         }
  19.         return false;
  20.     }
  21. }
复制代码
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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金歌

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表